- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
动机
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”。您可以通过“构建选项”添加自己的编译器。这对你不起作用吗?
您还可以配置 Alternative Toolchains在 XCode 中(从未尝试过)。
关于c++ - Xcode 默认标志从何而来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39733863/
我是一名优秀的程序员,十分优秀!