c++ - Xcode 默认标志从何而来?

标签 c++ xcode gcc

动机

Xcode 提供了操作所需的任何编译器/链接器工具链的能力,但默认 Xcode 配置采用 Mac SDK 并添加了一些默认标志,这些标志不会出现在项目本身的任何地方。

如果可以禁用/删除这些标志,则 Xcode 的 native 构建系统可以用于控制外部编译器/工具链,例如 xtensa-elf-gcc 和周围的工具,同时获得 Xcode 的代码突出显示和 clang 的分析的好处。与 Xcode 直接支持的外部 makefile 选项相比,这是一个非常可取的选项,它与 Xcode 的其余部分集成得不是特别好。

动机 TL;DR

如果可以禁用 Xcode 的默认标志,Xcode 可以直接支持为 ESP8266 编译代码(使用 CC=xtensa-elf-gcc)。

xtensa-elf-gcc 不支持默认标志(假定为 Mac OS)并阻止其使用。

标志是这不起作用的唯一原因。

示例

最基本的编译生成带有这些标志的 clang 命令:

-x c

-arch x86_64

-fmessage-length=0

-fdiagnostics-show-note-include-stack

-fmacro-backtrace-limit=0

-std=gnu99

-Wno-trigraphs

-fpascal-strings

-O0

-fno-common

-Wno-missing-field-initializers

-Wno-missing-prototypes

-Werror=return-type

-Wdocumentation

-Wunreachable-code

-Werror=deprecated-objc-isa-usage

-Werror=objc-root-class

-Wno-missing-braces

-Wparentheses

-Wswitch

-Wunused-function

-Wno-unused-label

-Wno-unused-parameter

-Wunused-variable

-Wunused-value

-Wempty-body

-Wconditional-uninitialized

-Wno-unknown-pragmas

-Wno-shadow

-Wno-four-char-constants

-Wno-conversion

-Wconstant-conversion

-Wint-conversion

-Wbool-conversion

-Wenum-conversion

-Wshorten-64-to-32

-Wpointer-sign

-Wno-newline-eof

-DDEBUG=1

-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk

-fasm-blocks

-fstrict-aliasing

-Wdeprecated-declarations

-mmacosx-version-min=10.12

-g

-Wno-sign-conversion

-Winfinite-recursion

-iquote [generated-files.hmap]

-I[own-target-headers.hmap]

-I[all-target-headers.hmap]

-iquote [project-headers.hmap]

-I[Build/Products/Debug/include]

-I[Build/Intermediates/libESP8266.build/Debug/libESP8266.build/DerivedSources/x86_64]

-I[Build/Intermediates/libESP8266.build/Debug/libESP8266.build/DerivedSources]

-F[Build/Products/Debug]

-MMD

-MT dependencies

-MF [Build/Intermediates/libESP8266.build/Debug/libESP8266.build/Objects-normal/x86_64/main.d]

--serialize-diagnostics [Build/Intermediates/libESP8266.build/Debug/libESP8266.build/Objects-normal/x86_64/main.dia]

-c /Users/asher/Projects/Arduino/libESP8266/main.c

-o [main.o]

显然,其中一些或多或少是必需的(-c、-o、各种 -Is 等),但大多数应该是完全可选的。

问题

那么他们来自哪里?我试过编辑基本模板,即使在减少所有与 Mac 相关的方面之后,结果也是一样的。它们是在某处以编程方式添加的吗?如果是这样,它(大概)在 DevToolsCore 或 IDEFoundation 中?

最佳答案

它们来自 XCode“Build Settings”。您可以通过“构建选项”添加自己的编译器。这对你不起作用吗?

enter image description here

您还可以配置 Alternative Toolchains在 XCode 中(从未尝试过)。

关于c++ - Xcode 默认标志从何而来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39733863/

相关文章:

c++ - 我的模板特化将调试版本与发布版本不同,这是 gcc 错误吗?

c++ - 得到一个c常数的值

ios - Xcode UIAutomation 无法与 TTTAttributedLabel 交互

iphone - 奇怪的 NSDate 和 NSDateFormatter 行为

java - 如何在 Java 中使用 GCC?

c++ - 我使用 gcc 错了吗?

c++ - 常量指针与指向常量字符串的指针

c++ - 在 C++ 中查找大乘法的余数

iphone - 本地通知

gcc - 运行时尝试编译代码时出现错误 127