我如何让CMake创建一个在系统头文件中禁止显示警告的xcode项目?

杰布科

我有一个带有第三方库依赖项的CMake项目。第三方库的标头会生成我关心的源代码警告。

CMake生成的Ninja项目(使用clang)不会为第三方库标头生成警告。

CMake生成的Xcode项目为第三方库标头生成警告。我尝试使用CMake命令包含第3方库路径

include_directories(SYSTEM dirname1 dirname2)

但是Xcode似乎对此信息不做任何事情。

如何从CMake生成不对系统标题发出警告的Xcode项目?

Xcode命令行仅将-I附加到标头包含路径上,而不管是否将其添加SYSTEM到CMake。

Darwin.cmake的以下部分令人鼓舞:

# Xcode does not support -isystem yet.
if(XCODE)
  set(CMAKE_INCLUDE_SYSTEM_FLAG_C)
  set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX)
endif()

添加了额外信息

我汇总了所概述问题的一小部分:

== CMakeLists.txt ==
include_directories(local_headers)
include_directories(SYSTEM system_headers)

set(CMAKE_CXX_FLAGS "-Werror=unused-variable")

add_executable(main main.cpp)

== main.cpp ==
#include <system_header.h>
#include "local_header.h"

int main(int, const char**)
{
}

== system_headers/system_header.h ==
int f()
{
  int x;
  return 5;
}

== local_headers/local_header.h ==
int g()
{
  int x = 5;
  return x;
}

运行cmake -GNinja && cmake --build .构建时没有错误。

运行cmake -GXcode && cmake --build .会出现以下错误: system_headers/system_header.h:3:7: error: unused variable 'x' [-Werror,-Wunused-variable] int x;

完整的Xcode编译路径为: /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-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-extensions -DCMAKE_INTDIR=\"Debug\" -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -fasm-blocks -fstrict-aliasing -Wdeprecated-declarations -Winvalid-offsetof -mmacosx-version-min=10.11 -g -Wno-sign-conversion -I/Users/jon/DEV/CMakeSandbox/XcodeSystemIncludes/xcode_build/Debug/include -I/Users/jon/DEV/CMakeSandbox/XcodeSystemIncludes/local_headers -I/Users/jon/DEV/CMakeSandbox/XcodeSystemIncludes/system_headers -I/Users/jon/DEV/CMakeSandbox/XcodeSystemIncludes/xcode_build/Project.build/Debug/main.build/DerivedSources/x86_64 -I/Users/jon/DEV/CMakeSandbox/XcodeSystemIncludes/xcode_build/Project.build/Debug/main.build/DerivedSources -Wmost -Wno-four-char-constants -Wno-unknown-pragmas -F/Users/jon/DEV/CMakeSandbox/XcodeSystemIncludes/xcode_build/Debug -Werror=unused-variable -MMD -MT dependencies -MF /Users/jon/DEV/CMakeSandbox/XcodeSystemIncludes/xcode_build/Project.build/Debug/main.build/Objects-normal/x86_64/main.d --serialize-diagnostics /Users/jon/DEV/CMakeSandbox/XcodeSystemIncludes/xcode_build/Project.build/Debug/main.build/Objects-normal/x86_64/main.dia -c /Users/jon/DEV/CMakeSandbox/XcodeSystemIncludes/main.cpp -o /Users/jon/DEV/CMakeSandbox/XcodeSystemIncludes/xcode_build/Project.build/Debug/main.build/Objects-normal/x86_64/main.o

直接在命令行上运行Xcode编译命令会产生相同的错误。

用户名

CMake解决方案

您可以-isystem通过以下方式显式设置标志

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem /path/to/system/header")

C ++解决方案

您可以通过添加编译指示来忽略系统标题中的警告

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-parameter"
#include <some/system/header.hpp> // warning ignored here
#pragma clang diagnostic pop
#include <myproject/header.hpp> // warning reported here

查看此答案以获取更多详细信息:

注意:对于这两种情况,您都必须检查是否使用了适当的编译器。例如-isystem,在MSVC中没有意义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Xcode中禁止显示警告?

来自分类Dev

我如何在PHP中创建一个require_once头文件以在函数内部使用?

来自分类Dev

如何创建一个在javascript中显示文件名的日志系统

来自分类Dev

如何创建一个 CMake 文件来编译项目的所有 C++ 文件?

来自分类Dev

在Xcode中,如何创建一个新的工作区并向其中添加一个项目,以便可以看到该项目及其文件?

来自分类Dev

XCode 8 Linker(ld)禁止显示警告

来自分类Dev

如何使我当前的文件系统成为 BTRFS 中的第一个根文件系统

来自分类Dev

我可以使属性禁止显示警告吗?

来自分类Dev

为什么Xcode以不同的方式对待两个相似的变量声明,其中第一个只显示警告,第二个显示警告+错误?

来自分类Dev

为什么我不能将头文件导入一个头文件中的库中?

来自分类Dev

C#禁止在Azure生成管道中显示警告

来自分类Dev

在scale_x_datetime中禁止显示警告

来自分类Dev

如果使用的资源ID属于另一个活动布局,如何显示警告/错误

来自分类Dev

如何在Xcode 6中创建一个空项目?

来自分类Dev

如何创建一个项目水平显示的组合框?

来自分类Dev

我如何在我的Maven项目中仅禁止一个传递依赖项?

来自分类Dev

我如何在我的Maven项目中仅禁止一个传递依赖项?

来自分类Dev

如何在 java 项目文件夹中创建一个 .txt 文件并写入其中

来自分类Dev

如何创建一个显示下拉菜单的 JTextField,该下拉菜单将显示我的数据库中的项目列表?

来自分类Dev

如何在一个以上的源文件中包括在头文件中声明的struct变量?

来自分类Dev

如何在一个以上的源文件中包括在头文件中声明的struct变量?

来自分类Dev

C:如何用makefile编译另一个头文件中包含的头文件?

来自分类Dev

使用删除引用的选项删除文件并直接从 finder 中删除,现在显示警告 XCode 8

来自分类Dev

如何创建一个EXCEL文件,避免删除项目

来自分类Dev

如何在php中创建一个插件系统?

来自分类Dev

如何在文档库中创建一个新项目作为文件链接?

来自分类Dev

如何从许多pdf中创建一个pdf,而它们的文件名也显示在一个pdf中?

来自分类Dev

我删除了一个文件,并且Xcode显示了一个Clang错误

来自分类Dev

在“更多”溢出中从选项卡显示警报使我回到上一个视图

Related 相关文章

  1. 1

    如何在Xcode中禁止显示警告?

  2. 2

    我如何在PHP中创建一个require_once头文件以在函数内部使用?

  3. 3

    如何创建一个在javascript中显示文件名的日志系统

  4. 4

    如何创建一个 CMake 文件来编译项目的所有 C++ 文件?

  5. 5

    在Xcode中,如何创建一个新的工作区并向其中添加一个项目,以便可以看到该项目及其文件?

  6. 6

    XCode 8 Linker(ld)禁止显示警告

  7. 7

    如何使我当前的文件系统成为 BTRFS 中的第一个根文件系统

  8. 8

    我可以使属性禁止显示警告吗?

  9. 9

    为什么Xcode以不同的方式对待两个相似的变量声明,其中第一个只显示警告,第二个显示警告+错误?

  10. 10

    为什么我不能将头文件导入一个头文件中的库中?

  11. 11

    C#禁止在Azure生成管道中显示警告

  12. 12

    在scale_x_datetime中禁止显示警告

  13. 13

    如果使用的资源ID属于另一个活动布局,如何显示警告/错误

  14. 14

    如何在Xcode 6中创建一个空项目?

  15. 15

    如何创建一个项目水平显示的组合框?

  16. 16

    我如何在我的Maven项目中仅禁止一个传递依赖项?

  17. 17

    我如何在我的Maven项目中仅禁止一个传递依赖项?

  18. 18

    如何在 java 项目文件夹中创建一个 .txt 文件并写入其中

  19. 19

    如何创建一个显示下拉菜单的 JTextField,该下拉菜单将显示我的数据库中的项目列表?

  20. 20

    如何在一个以上的源文件中包括在头文件中声明的struct变量?

  21. 21

    如何在一个以上的源文件中包括在头文件中声明的struct变量?

  22. 22

    C:如何用makefile编译另一个头文件中包含的头文件?

  23. 23

    使用删除引用的选项删除文件并直接从 finder 中删除,现在显示警告 XCode 8

  24. 24

    如何创建一个EXCEL文件,避免删除项目

  25. 25

    如何在php中创建一个插件系统?

  26. 26

    如何在文档库中创建一个新项目作为文件链接?

  27. 27

    如何从许多pdf中创建一个pdf,而它们的文件名也显示在一个pdf中?

  28. 28

    我删除了一个文件,并且Xcode显示了一个Clang错误

  29. 29

    在“更多”溢出中从选项卡显示警报使我回到上一个视图

热门标签

归档