从命令行调用CMake时,将include目录添加到CMake中



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

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

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

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

  1. sakra在之前的回答中提出的方法,即用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>
    

我相信它可以用一种更"原生"的方式来完成,但我没有在CMake中找到一个负责标头路径的变量。

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

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

CMake将使用来自环境变量的标志初始化缓存变量CMAKE_CXX_FLAGS。该变量影响所有生成类型。

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

只是对其他答案的补充说明:对于macOS 10.14.5上的CMake3.15.3,似乎只有使用CMake标志的解决方案才能正常工作。

所以,在我的情况下,只有这个解决方案运行良好:

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

最新更新