为什么 cmake 在定义 CXX 时忽略 ADD(SYSTEM) 头文件?
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++ 作为编译器。问题是我包含的所有系统标头
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,它提供了一些可能解决你的问题的选择。
一旦你做对了,你可以为构建你的项目的其他人记录等效的命令行指令。
- 程序在使用 system() 启动另一个可执行文件时停止
- 如何使用 C/C++ 和 system() 系统调用以外的其他方法在 Linux 中获取文件功能?
- Java System.loadLibrary 不会在 /usr/lib/x86_64-linux-gnu/ 文件夹中查
- GetPrivateProfileStringA 返回"The system cannot find the file specified."即使文件存在
- 构建 vcxproj 文件给我一个无信息的错误"The system cannot find the path specified"
- 致命错误:找不到 SFML/System.hpp' 文件
- 如何将带有 sh 文件的文件夹添加到 cmake 以通过 system() 调用该文件
- 您如何使用System()调用带有引号的参数的批处理文件
- 无法打开文件:./sysdeps/posix/system.c
- 如何检查文件或目录是否为'system'文件或目录
- Cmake找不到boost库文件,线程,date_time,iostreams,system
- 如何在不使用System()的情况下使用C 删除除最后10个文件外的所有文件
- C 如何通过同一MFC应用程序通过System Command打开Excel文件后关闭CMD EXE
- 通过Linux命令行执行时,可执行文件运行正常 - 调用C System()命令时运行时错误
- 为什么我不能在Windows Server 2008中使用System()从服务启动批处理文件
- 为什么 cmake 在定义 CXX 时忽略 ADD(SYSTEM) 头文件?
- 尝试使用 fread 读取文本文件时发生 'System.AccessViolationException' 类型的未处理异常
- 替代System(),用于在程序中运行批处理文件
- 使用system()运行两个可执行文件
- 如何在Windows上使用std::system运行带有空格的可执行文件