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

时间:2015-04-27 14:14:38

标签: c++ macos cmake macports

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

SELECT Avis,Cde_Sap,Don_Ordre,PN_in ,SN_in,DATE2,Statut_Cde 
FROM w2 
UNION ALL 
SELECT Avis,Cde_Sap,Don_Ordre,PN_in ,SN_in,DATE2,Statut_Cde 
FROM w3

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

包含的所有系统头文件
export CXX=/opt/local/bin/g++

包含在常规标题中。换句话说,我得到了一大堆警告(INCLUDE_DIRECTORIES(SYSTEM "/path/to/system/header) ),我非常想抑制它,因为我不关心像Boost或Eigen这样的系统标题中的警告。

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

2 个答案:

答案 0 :(得分:4)

我终于找到了一个解决方案,从某个随机发现的帖子: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

答案 1 :(得分:1)

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

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

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