【问题标题】:CMake target_include_directories(SYSTEM ...): SYSTEM option does not seem to work on recent versions of CMake targeting XcodeCMake target_include_directories(SYSTEM ...):SYSTEM 选项似乎不适用于针对 Xcode 的最新版本的 CMake
【发布时间】:2015-07-30 11:22:25
【问题描述】:

我们正在构建一个依赖于 Boost 的应用程序,编译会在 Boost 标头 (tag_of.hpp) 中生成大量警告“无法重新声明类成员”

为避免向构建日志发送垃圾邮件,我们决定将 Boost 标头作为系统标头包含在内:

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

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

环境为CMake 3.0.0,生成Xcode 5.1.1的工程文件。 这似乎是其他一些问题(请参阅this answer 中的最后两个 cmets)。

有没有一种工作方法可以将标头作为系统包含在内?


EDIT:刚刚在同一个环境下测试过,将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})

从此脚本生成的 Xcode 项目文件将 Boost 的路径放在构建设置中:头文件搜索路径,而不是将其附加到 -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 -W括号 -Wswitch -Wno-unused-function -Wno -unused-label -Wno-unused-parameter -Wno-unused-variable -Wunused-value -Wno-empty-body -Wno-uninitialized -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-扩展 -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-sign-conversion -I/Users/.../system_dependencies/build/Debug/include

-I/Users/.../SDK/boost/include

......

【问题讨论】:

  • 编译器是如何调用的?请粘贴make VERBOSE=1(或Xcode等价物)的输出
  • @m.s.感谢您的建议。我发布了一个包含 Xcode 进行的编译器调用的新编辑,它是否相当于 make 中的 VERBOSE
  • 您确定问题出在 cmake 而不是 Xcode 上吗? Xcode 是否支持-isystem?我想不是。 Apple 错误跟踪器中还存在一个问题
  • @Francesco Xcode(在相当新的版本中[用 Xcode 5.1.1 测试])确实支持它,因为我可以手动使用它。
  • @AdN 您必须设置哪个变量?我想试一试

标签: c++ xcode include cmake


【解决方案1】:

这个问题似乎只发生在 XCode 生成器上,因为 CMake 认为它不支持 isystem 标志。我认为最好的解决方案是在 CMake 错误跟踪器上报告此问题。

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2021-09-27
    • 2020-09-06
    • 1970-01-01
    • 2014-12-02
    相关资源
    最近更新 更多