从命令行调用时,将包含目录添加到CMake

Ayb*_*gür 22 c++ cmake

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

换句话说,我需要-isystem /path/to/my/include添加到我的编译器标志,但在调用类似的东西时cmake ...

也许是这样的cmake .. -DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS -isystem /path/to/my/include"?有没有办法做到这一点?

avt*_*ton 20

我也有同样的问题.我找到了两个解决方案

  1. 在前面的回答沙克拉通过提出一个,即设置与C++标志的环境变量:

    export CXXFLAGS=-isystem\ /path/to/my/include
    cmake <path to my sources>
    
    Run Code Online (Sandbox Code Playgroud)

    或者相同的事情,但环境变量只为此CMake调用设置:

    CXXFLAGS=-isystem\ /path/to/my/include cmake <path to my sources>
    
    Run Code Online (Sandbox Code Playgroud)

    重要信息:在启动任何此表单之前,您必须清理构建目录(即清理CMake缓存).如果不清除缓存,CMake将继续使用CMAKE_CXX_FLAGS上一次运行中的缓存.

  2. 直接CMAKE_CXX_FLAGS在cmake字符串中设置:

    cmake -DCMAKE_CXX_FLAGS=-isystem\ /path/to/my/include <path to my sources>
    
    Run Code Online (Sandbox Code Playgroud)

我相信它可以通过更"原生"的方式完成,但我没有找到负责CMake中标头路径的变量.

  • 这个重要的提示拯救了我的理智! (2认同)

sak*_*kra 14

您可以CXXFLAGS在调用CMake之前设置环境变量.

$ export CXXFLAGS=-isystem\ /path/to/my/include
$ cmake ..
Run Code Online (Sandbox Code Playgroud)

CMake将CMAKE_CXX_FLAGS使用环境变量中的标志初始化缓存变量.该变量会影响所有构建类型.

  • 或没有`export`形式:`CXXFLAGS = -isystem\/ path/to/my/include cmake ..` (3认同)

scr*_*ari 7

-DCMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES=<something>即使没有工具链文件,使用也对我有用。这避免了混乱的编译器标志。

  • 这仍然可以用作将基于 Cmake 的项目加载到 IDE 中的解决方法。此外,当使用 LLVM 工具链时,此选项有助于强制 Cmake 查看来自 LLVM 的标准标头,而不是系统中安装的标头(通常来自不同版本的 GNU 工具链)。 (2认同)

rmb*_*chi 5

对其他答案的补充说明:对于macOS 10.14.5上的CMake 3.15.3,只有使用 CMake 标志的解决方案似乎可以正常工作。

所以,就我而言,只有这个解决方案工作正常:

cmake -DCMAKE_CXX_FLAGS=-I\ /path/to/include <path/to/source>
Run Code Online (Sandbox Code Playgroud)

或者

cmake -DCMAKE_C_FLAGS=-I\ /path/to/include <path/to/source>
Run Code Online (Sandbox Code Playgroud)