Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从命令行调用CMake时将include目录添加到CMake_C++_Cmake - Fatal编程技术网

C++ 从命令行调用CMake时将include目录添加到CMake

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

我的情况是,我不应该干扰现有的CMakeLists.txt文件,但我仍然应该在构建中添加一些g++系统包含目录

换句话说,我需要将
-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
。该变量影响所有生成类型。

我也有同样的问题。我找到了两种解决方案:

< P>,即用C++标志设置环境变量:

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>