gpt4 book ai didi

xcode - 我怎样才能让 CMake 创建一个 xcode 项目,在系统头文件中抑制警告?

转载 作者:行者123 更新时间:2023-12-01 09:04:02 25 4
gpt4 key购买 nike

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

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

CMake 生成的 Xcode 项目会针对第 3 方库 header 生成警告。我尝试使用 CMake 命令包含第 3 方库路径

include_directories(SYSTEM dirname1 dirname2)

但是 Xcode 似乎没有对这些信息做任何事情。

我如何从 CMake 生成不产生系统 header 警告的 Xcode 项目?

无论我是否将 SYSTEM 添加到 CMake,Xcode 命令行只是将 -I 附加到 header 包含路径。

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: 错误:未使用的变量 'x' [-Werror,-Wunused-variable]
诠释 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-转换 -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/用户/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=未使用-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/X codeSystemIncludes/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++解决方案

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

#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 中没有意义。

关于xcode - 我怎样才能让 CMake 创建一个 xcode 项目,在系统头文件中抑制警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34159102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com