动机
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命令:
-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转换
-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 [自有目标headers.hmap]
-I [全目标headers.hmap]
-iquote [project-headers.hmap]
-I [Build / Products / Debug / include]
-I [构建/中间体/ libESP8266.build /调试/ libESP8266.build / DerivedSources / x86_64的]
-I [构建/中间体/ libESP8266.build /调试/ libESP8266.build / DerivedSources]
-F [Build / Products / Debug]
-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中?
答案 0 :(得分:0)
答案 1 :(得分:0)
有一个答案,但这不是一个方便的答案。
Xcode构建实现可以在以下位置找到:
/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin
核心定义似乎是由各种插件中的.xcspec文件组装而成的,这些插件可以在以下位置找到:
/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins
特别是对于clang和ld,请检出:
/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Clang\ LLVM\ 1.0.xcplugin/Contents/Resources/Clang\ LLVM\ 1.0.xcspec
/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/Ld.xcspec
取决于您要寻找的内容,您可能必须进行挖掘。如果要查找特定的构建设置,请在Xcode构建设置检查器中找到它,然后在文本内容中搜索相应的变量名。
理论上,.xcspec文件允许捆绑包标识符和继承说明组装所需的任何构建结果。据我所知,这些细节并没有得到很好的记录/根本没有记录。
由于Apple仅将Xcode插件限制为Apple,因此可能无法在用户级别以合理的方式扩展构建定义。可以修改默认系统,但最终只能得到修改后的版本。
也许其他人已经知道或以后会更多地了解如何利用此设置,在这种情况下,我将更新答案以反映我们的最佳知识。