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

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

本文关键字:SYSTEM 文件 ADD cmake 定义 CXX 为什么      更新时间:2023-10-16

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

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

在我的个人资料中。现在,cmake 正确地检测 g++ 作为编译器。问题是我包含的所有系统标头

INCLUDE_DIRECTORIES(SYSTEM "/path/to/system/header)

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

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

我终于从一个随机找到的帖子中找出了一个解决方案: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")将标头添加为系统标头,而无需使用上述SET

export CXX=/opt/local/bin/g++ 与其他几个未适应的系统变量一起使用似乎有点不正统,所以奇怪的行为可能并不奇怪。

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

一旦你做对了,你可以为构建你的项目的其他人记录等效的命令行指令。

相关文章: