Xcode默认标志来自哪里?

时间:2016-09-27 20:36:42

标签: c++ xcode gcc

动机

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中?

2 个答案:

答案 0 :(得分:0)

他们来自XCode“Build Settings”。您可以通过“构建选项”添加自己的编译器。这不适合你吗?

enter image description here

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

答案 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,因此可能无法在用户级别以合理的方式扩展构建定义。可以修改默认系统,但最终只能得到修改后的版本。

也许其他人已经知道或以后会更多地了解如何利用此设置,在这种情况下,我将更新答案以反映我们的最佳知识。