为什么在定义 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
。
我遇到了以下烦人的问题。我在 OSX 上通过 macports 安装了 g++,一切正常。但是,cmake 仍然将 clang++ 检测为 cpp 编译器。因此,我最终把
export CXX=/opt/local/bin/g++
在我的个人资料中。现在,cmake 正确地将 g++ 检测为编译器。问题是我包含在
中的所有系统 headersINCLUDE_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
。