c++ - 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 选项似乎被覆盖了......知道发生了什么吗?提前致谢
解决方案
推荐阅读
- javascript - Visual Studio 代码断点在使用 TypeScript 的 Node.js 上不起作用
- python - 如何在 Pandas DataFrame 中基于行传递的值来表示值
- c++ - Fill struct with a binary file
- reactjs - jsx React 中的嵌套条件渲染
- python - 列表处理。索引行和列
- facebook - 结合谷歌和 Facebook OAuth 2.0
- javascript - _.concat lodash vs Array.prototype.concat()
- python-3.x - 根据值编辑 seaborn 热图注释
- c# - C# 应用程序(所有用户安装)应为每个用户使用 %appdata%(甚至 runAs Admin 和/或在 RDP 会话中)
- sql - 排名应仅针对特定列值增加