如何在Linux中强制cmake使用/usr/include中的c++头文件?
How can I force cmake to use C++ header files in /usr/include in Linux?
我有一个cmake项目,它使用安装在/usr/include
中的头文件,让我们称之为freeglut.h
。当我用find_package(GLUT)
时,我得到${GLUT_INCLUDE_DIR}
指向/usr/include
。终成眷属。
现在,我正在添加CUDA,它在find_package(CUDA)
包含的路径之一中保留了这些和其他头文件的副本。通常我会通过将${GLUT_INCLUDE_DIR}
放在include_directories()
中的${CUDA_INCLUDE_DIRS}
之前来解决这个问题。然而,在Unix系统上,cmake在UnixPaths.cmake
中维护了一个名为CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES
的list
,其中包含/usr/include
,并且显然阻止cmake为目录/usr/include
的编译器发出-I<dir>
参数,这意味着编译器首先搜索CUDA路径,并使用那里找到的freeglut.h
头。
我已经尝试使用list(REMOVE_ITEM ...
从CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES
列表中删除/usr/include
,但这并没有改变cmake制作的编译器命令。
我当然可以开始破解CUDA安装,删除我不想要的头,或修改CUDA_INCLUDE_DIRS
变量,但是是否有一个干净的方法来告诉cmake首先使用系统头文件,如果它们存在?
我想-idirafter
标志应该可以帮助你:
https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html- dir
在dir中搜索头文件,但要在使用-I指定的所有目录和标准系统目录都有头文件之后执行被耗尽。Dir被视为系统包含目录。
您可以像这样使用它来降低CUDA包含dirs的优先级:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -idirafter /usr/include/<CUDA_includes>")
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- 如何将构建的C++库安装到 /usr/include?
- /usr/include/c++/7/cstdlib:75:15:致命错误:stdlib.h:没有这样的文件或目录 #i
- 为什么"/usr/include"不在 GCC 默认搜索路径中
- pip install uwsgi 失败,出现 /usr/local/include/string/string.h:7:10:致命错误:找不到'sstream'文件?
- 将 TensorFlow 链接到C++.Protobuf (/usr/local/include/google/prot
- Boost 文件在 /usr/local/include 和 /usr/include 中有所不同
- 不应该在 /usr/local/include 中抑制来自头文件的警告吗?
- 如何指定远程预处理器包括192.0.2.17://usr/include的路径
- /usr/include/boost/filesystem/path.hpp:307:未定义对'boost::files
- Cmake,在 /usr/local/include 中查找头文件,在 /usr/local/lib 中查找库
- 如何在 mac 中编辑 /usr/include/dlfcn.h
- GMOCK 叮当讨厌的错误"/usr/include/limits.h:123:16: fatal error: 'limits.h' file not found"
- 错误/usr/include/string.h:652:42:错误:生成caffe时未在此作用域中声明“memcpy”
- XCode 找不到 zmq.h,即使它位于 /usr/local/include 和标头搜索路径中
- Xcode 4.3在/usr/include中找不到头文件
- /usr/include标头的C源文件(例如stdio.h)
- QTableView clearSelect 失败,并显示 ASSERT:在文件 /usr/include/qt4/QtCore/qlist.h 中"!isEmpty()",第 282 行
- 如何包含正确的:<SDL2/SDL.h> 或 <SDL.h> 并设置 -I/usr/include/SDL2?
- 如何在cmake项目中包含/usr/include中的头文件