CMake target_include_directories(SYSTEM ..): SYSTEM选项似乎不适用于最

CMake target_include_directories(SYSTEM ...): SYSTEM option does not seem to work on recent versions of CMake targeting Xcode

本文关键字:SYSTEM 适用于 选项 不适用 include target directories CMake      更新时间:2023-10-16

我们正在构建一个依赖Boost的应用程序,编译时会在Boost头文件(tag_of.hpp)中生成许多警告"类成员不能被重新声明"

为了避免垃圾构建日志,我们决定将Boost头文件作为系统头文件:

target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC ${Boost_INCLUDE_DIRS})

我们的理解是这个命令应该把Boost include目录放在-isystem编译器标志后面。然而,它并没有这样做,而是把它放在标题搜索路径中的"正常"包含目录旁边。

环境是CMake 3.0.0,为Xcode 5.1.1生成一个项目文件。这似乎是其他一些人的问题(参见这个答案的最后两个评论)。

是否有一个工作的方式包括头作为系统?


EDIT:刚刚在相同的环境下测试,将CMake更新到版本3.3.0,行为是相同的。


EDIT:这里是一个最小的例子,显示了我的环境

中的问题
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})

从这个脚本生成的Xcode项目文件将Boost的路径放在构建设置中:头搜索路径,而不是将其附加在-isystem编译器标志后面。由IDE发出的编译命令确认:

/应用程序/xcode/内容/开发/工具链/XcodeDefault.xctoolchain/usr/bin/叮当声-x c++ -arch x86_64 -fmessage-length=0 -fpascal-strings - 0 -Wno-missing-field-initializers -Wno-missing-prototypes -Wno-return-type - wno -non-virtual- doctor -Wno-overloaded-virtual -Wno-exit-time-destructors - wno -missing- backs -Wparentheses -Wswitch -Wno-unused-function -Wno-unused-label -Wno-unused-parameter -Wno-unused-variable - wno -value -Wno-empty-body -Wno-uninitialized -Wno-unknown-pragmas -Wno-shadow- wno -short -64- 32 -Wno-newline-eof - wno -c++11-extensions -DCMAKE_INTDIR="Debug" -isysroot/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/sdk/MacOSX10.9.sdk-mmacosx-version-min=10.9 -g -Wno-sign-conversion -I/Users/…/system_dependencies/build/Debug/include

- i/用户/…/SDK/提高/包括

……

这个问题看起来只发生在XCode生成器上,因为CMake认为它不支持系统标志。我认为最好的解决办法是在CMake bug tracker上报告这个问题。