【发布时间】:2023-03-05 22:20:01
【问题描述】:
动机
Xcode 提供了操作所需的任何编译器/链接器工具链的能力,但默认 Xcode 配置假定 Mac SDK 并添加了许多默认标志,这些标志不会出现在项目本身的任何位置。
如果可以禁用/删除这些标志,Xcode 的本地构建系统可以用于控制外部编译器/工具链,例如 xtensa-elf-gcc 和周边工具,同时获得 Xcode 的代码突出显示和 clang 的分析的好处。与 Xcode 直接支持的外部 makefile 选项相比,这将是一个非常可取的选项,它与 Xcode 的其余部分没有特别好的集成。
动机 TL;DR
如果可以禁用 Xcode 的默认标志,Xcode 可以直接支持为 ESP8266 编译代码(使用 CC=xtensa-elf-gcc)。
xtensa-elf-gcc 不支持默认标志(假定为 Mac OS)并阻止其使用。
标志是这不起作用的唯一原因。
示例
最基本的编译会生成带有这些标志的 clang 命令:
-xc
-arch x86_64
-fmessage-length=0
-fdiagnostics-show-note-include-stack
-fmacro-backtrace-limit=0
-std=gnu99
-Wno-trigraphs
-fpascal 字符串
-O0
-fno-普通
-Wno-missing-field-initializers
-Wno-missing-prototypes
-Werror=返回类型
-W文档
-Wunreachable-code
-Werror=deprecated-objc-isa-usage
-Werror=objc-root-class
-Wno-missing-braces
-括号
-W开关
-Wunused-function
-Wno-unused-label
-Wno-unused-parameter
-Wunused-变量
-Wunused-value
-空体
-W条件未初始化
-Wno-unknown-pragmas
-Wno-shadow
-Wno-four-char-constants
-Wno-conversion
-W常量转换
-Wint-转换
-Wbool-转换
-Wenum-转换
-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-递归
-iquote [生成的文件.hmap]
-I[own-target-headers.hmap]
-I[all-target-headers.hmap]
-iquote [project-headers.hmap]
-I[构建/产品/调试/包含]
-I[Build/Intermediates/libESP8266.build/Debug/libESP8266.build/DerivedSources/x86_64]
-I[Build/Intermediates/libESP8266.build/Debug/libESP8266.build/DerivedSources]
-F[构建/产品/调试]
-MMD
-MT 依赖关系
-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 中?
【问题讨论】:
-
我通过让 cmake 构建 Xcode 项目来做到这一点。
-
这是我想避免的 :) Xcode 在不负责构建时不会提供所有相同的界面优势。
-
你可以通过选项-GXcode让cmake构建一个Xcode项目
-
但是你会得到一个外部的 make 目标。
-
你解决过这个问题吗? Xcode 只是抛出一堆我不想要的默认标志......