为什么在定义 CXX 时 cmake 会忽略 ADD(SYSTEM) header 文件?

Why does cmake ignore ADD(SYSTEM) header files when CXX is defined?

我遇到了以下烦人的问题。我在 OSX 上通过 macports 安装了 g++,一切正常。但是,cmake 仍然将 clang++ 检测为 cpp 编译器。因此,我最终把

export CXX=/opt/local/bin/g++

在我的个人资料中。现在,cmake 正确地将 g++ 检测为编译器。问题是我包含在

中的所有系统 headers
INCLUDE_DIRECTORIES(SYSTEM "/path/to/system/header)

作为常规 headers 包含在内。换句话说,我收到了一大堆警告 (-Wall),我非常想抑制这些警告,因为我不关心系统 headers 中的警告,例如 Boost 或 Eigen。

知道如何解决这个问题吗?这让我发疯,我完全不明白为什么在配置文件中添加 CXX 会导致这种行为。如果我从我的配置文件中删除 export CXX 并在 CMakeLists.txt 中手动将 CMAKE_CXX_COMPILER 设置为 g++ 那么一切都很好,系统文件不再有警告。

export CXX=/opt/local/bin/g++ 与其他几个未调整的系统变量一起使用似乎有点不合常理,因此奇怪的行为可能并不奇怪。

我建议您从 cmake-gui 从头开始​​配置(=从干净的构建目录)您的项目,菜单允许您指定要使用的编译器的路径。您还可以使用自定义工具链文件。我建议你使用 cmake-gui,它提供了几个可能会解决你问题的选择。

一旦你做对了,你就可以为构建你的项目的其他人记录 the equivalent command line instruction

我终于想出了一个解决方案,从不知何故随机发现 post:http://www.cmake.org/pipermail/cmake/2011-June/044769.html。由于某种原因, SYSTEM 指令被忽略了。设置

SET(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem ")

已解决,不再为系统文件生成警告。

这是一个非常特殊的问题,只出现在 OS X 上。在我测试的所有其他系统上,INCLUDE_DIRECTORIES(SYSTEM "/path/to/system/header") 将 headers 添加为系统 headers,没有任何需要使用上面的SET