我是CMake的新手,我正在尝试为所有iOS平台交叉构建C可执行文件。 所以,我写了如下的CMakeLists.txt
cmake_minimum_required(VERSION 3.15.2)
project(myProject C)
set_property(GLOBAL PROPERTY USE_FOLDERS YES)
set(MY_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/my_source_file.c)
set(MY_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/include)
add_library(myTarget STATIC ${MY_SOURCES})
target_include_directories(myTarget PRIVATE ${MY_INCLUDES})
target_compile_options(myTarget PUBLIC -Werror -Wall)
然后,我启动CMake配置阶段,在源代码树之外创建一个构建文件夹,然后执行命令
cmake -G Xcode -DCMAKE_SYSTEM_NAME=iOS -S my_source_dir_path -B .
一切似乎都很好,在Build树中创建了一个Xcode项目文件。如果我使用XCode打开它并从此IDE进行构建,则实际上会使用“ -Werror”和“ -Wall”标志进行编译。 相反,如果我输入
cmake --build . --config Release
从同一Build树目录中的,从控制台上出现的输出中,我看到用于标志的标志与CMake文件和生成的XCode项目文件中的标志完全不同。这是给定翻译单元的编译器输出的摘录
...
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x c -target arm64-apple-ios13.1 -fmessage-length=171 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -fcolor-diagnostics -Wno-trigraphs -fpascal-strings -O3 -Wno-missing-field-initializers -Wno-missing-prototypes -Wno-return-type -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-float-conversion -Wno-non-literal-null-conversion
-Wno-objc-literal-conversion -Wshorten-64-to-32 -Wpointer-sign -Wno-newline-eof
...
因此,我的目标编译选项似乎正在被覆盖... 有什么想法吗? 预先感谢