首页 > 解决方案 > CMake - 从 cmd 行构建时丢失 iOS 编译选项

问题描述

我是 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

从同一个构建树目录中,从控制台上出现的输出中,我看到用于完全不同于 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
    ...

因此,我的 Target Compile 选项似乎被覆盖了......知道发生了什么吗?提前致谢

标签: c++ioscmake

解决方案


推荐阅读