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

时间:2014-09-15 13:45:10

标签: c++ cmake

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

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

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

4 个答案:

答案 0 :(得分:16)

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

  1. one proposed by sakra in a previous answer,即使用C ++标志设置环境变量:

    export CXXFLAGS=-isystem\ /path/to/my/include
    cmake <path to my sources>
    

    OR 同样的事情,但环境变量仅为此 CMake 电话设置:

    CXXFLAGS=-isystem\ /path/to/my/include cmake <path to my sources>
    

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

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

    cmake -DCMAKE_CXX_FLAGS=-isystem\ /path/to/my/include <path to my sources>
    
  3. 我相信它可以由更多的本地人来完成。方式,但我没有找到一个负责CMake中标题路径的变量。

答案 1 :(得分:14)

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

$ export CXXFLAGS=-isystem\ /path/to/my/include
$ cmake ..

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

答案 2 :(得分:6)

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

答案 3 :(得分:0)

对于其他答案,还需额外说明:对于 macOS 10.14.5 上的CMake 3.15.3 ,只有使用CMake标志的解决方案才能正常工作。

因此,就我而言,只有此解决方案可以正常工作:

cmake -DCMAKE_CXX_FLAGS=-I\ /path/to/include <path/to/source>