C++ 从命令行调用CMake时将include目录添加到CMake
我的情况是,我不应该干扰现有的CMakeLists.txt文件,但我仍然应该在构建中添加一些g++系统包含目录 换句话说,我需要将C++ 从命令行调用CMake时将include目录添加到CMake,c++,cmake,C++,Cmake,我的情况是,我不应该干扰现有的CMakeLists.txt文件,但我仍然应该在构建中添加一些g++系统包含目录 换句话说,我需要将-isystem/path/to/my/include添加到我的编译器标志中,但是在调用类似cmake..的东西时 可能类似于cmake-DCMAKE_CXX_FLAGS=“$CMAKE_CXX_FLAGS-isystem/path/to/my/include”?有办法做到这一点吗?您可以在调用CMake之前设置环境变量CXXFLAGS $ export CXXFLA
-isystem/path/to/my/include
添加到我的编译器标志中,但是在调用类似cmake..
的东西时
可能类似于
cmake-DCMAKE_CXX_FLAGS=“$CMAKE_CXX_FLAGS-isystem/path/to/my/include”
?有办法做到这一点吗?您可以在调用CMake之前设置环境变量CXXFLAGS
$ export CXXFLAGS=-isystem\ /path/to/my/include
$ cmake ..
CMake将使用环境变量的标志初始化缓存变量
CMake_CXX_FLAGS
。该变量影响所有生成类型。我也有同样的问题。我找到了两种解决方案:
export CXXFLAGS=-isystem\ /path/to/my/include
cmake <path to my sources>
我相信这可以通过一种更“自然”的方式来完成,但我没有在CMake中找到一个变量来负责头的路径。只是对其他答案的一个补充说明:对于macOS 10.14.5上的CMake3.15.3,只有使用CMake标志的解决方案才能正常工作 因此,在我的案例中,只有这个解决方案效果良好:
cmake -DCMAKE_CXX_FLAGS=-I\ /path/to/include <path/to/source>
cmake-DCMAKE\u CXX\u FLAGS=-I\/path/to/include
使用-DCMAKE\u CXX\u STANDARD\u INCLUDE\u DIRECTORIES=
即使没有工具链文件也能为我工作。这避免了编译器标志的混乱。那么您想添加编译标志,然后删除它们吗?还是只想添加它们?我只想添加它们,而不接触CmakeList。请注意,变量引用,$CMAKE\u CXX\u FLAGS
,将引用一个shell变量。可能不是你想要的。实际上,它在命令行上应该是无用的。或者没有export
form:cxflags=-isystem\/path/to/my/include-cmake..
那个重要的提示保存了我的理智!如果我需要添加多个目录以包含来自命令行的路径,该怎么办?您可以传递多个-isystem参数(例如使用常规的-i
方式,即-isystem path0-isystem path1
),我认为您不应该覆盖此参数。它是由工具链文件设置的。如果您重写它,最终可能无法找到标准的C++头文件。这仍然可以作为将基于CIFE的项目加载到IDE中的一种解决方案。此外,当使用LLVM工具链时,此选项有助于强制Cmake查看LLVM中的标准头,而不是系统中安装的头(通常来自不同版本的GNU工具链)。
cmake -DCMAKE_CXX_FLAGS=-isystem\ /path/to/my/include <path to my sources>
cmake -DCMAKE_CXX_FLAGS=-I\ /path/to/include <path/to/source>