Ad *_*d N 4 c++ xcode cmake include
我们正在构建一个依赖于 Boost 的应用程序,编译会在 Boost 头文件 (tag_of.hpp) 中生成大量警告“不能重新声明类成员”。
为了避免垃圾邮件构建日志,我们决定将 Boost 标头作为系统标头包含在内:
target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC ${Boost_INCLUDE_DIRS})
Run Code Online (Sandbox Code Playgroud)
我们的理解是该命令应该将 Boost 包含目录放在-isystem编译器标志后面。然而,它没有做这样的事情,而是将它放在标题搜索路径中的“正常”包含目录旁边。
环境为CMake 3.0.0,为Xcode 5.1.1生成项目文件。这似乎是其他一些人的问题(请参阅此答案中的最后两条评论)。
有没有一种工作方法可以将标题作为系统包含在内?
编辑:刚刚在相同的环境中测试,将 CMake 更新到版本3.3.0,行为是相同的。
编辑:这是一个最小的例子,它显示了我的环境中的问题
cmake_minimum_required(VERSION 3.0)
find_package(Boost 1.49 COMPONENTS)
project(system_dependencies)
add_executable(${PROJECT_NAME} main.cpp)
target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC ${Boost_INCLUDE_DIRS})
Run Code Online (Sandbox Code Playgroud)
从此脚本生成的 Xcode 项目文件将 Boost 的路径放在构建设置中:Header search path,而不是将其附加在-isystem编译器标志后面。IDE发出的编译命令证实了这一点:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x c++ -arch x86_64 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit =0 -Wno-trigraphs -fpascal-strings -O0 -Wno-missing-field-initializers -Wno-missing-prototypes -Wno-return-type -Wno-non-virtual-dtor -Wno-overloaded-virtual -Wno-exit -time-destructors -Wno-missing-braces -Wparentheses -Wswitch -Wno-unused-function -Wno-unused-label -Wno-unused-parameter -Wno-unused-variable -Wunused-value -Wno-empty-body -Wno -未初始化 -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wno-constant-conversion -Wno-int-conversion -Wno-bool-conversion -Wno-enum-conversion -Wno -shorten-64-to-32 -Wno-newline-eof -Wno-c++11-extensions -DCMAKE_INTDIR=\"Debug\" -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -fasm-blocks -fstrict-aliasing -Wdeprecated-declarations -Winvalid-offsetof -mmacosx-version-min=10.9 -g -Wno-符号转换 -I/Users/.../system_dependencies/build/Debug/include
-I/Users/.../SDK/boost/include
......
| 归档时间: |
|
| 查看次数: |
2916 次 |
| 最近记录: |