Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 通过xcodebuild传递编译器标志_Ios_Xcode_Xcodebuild - Fatal编程技术网

Ios 通过xcodebuild传递编译器标志

Ios 通过xcodebuild传递编译器标志,ios,xcode,xcodebuild,Ios,Xcode,Xcodebuild,我目前正在使用xcodebuild来自动测试iOS 现在,我一直在尝试通过Xcode将编译器标志直接传递给编译器。这些标志是:-fprofile arcs-ftest覆盖率 我没有修改xcodeproj的自由,这就是为什么我想通过xcodebuild命令注入这些标志 可能是这样的: xcodebuild -project path/to/my.xcodeproj -scheme MyApp -fprofile-arcs -ftest-coverage 这可行吗?如何?显然,大多数编译器标志都可

我目前正在使用xcodebuild来自动测试iOS

现在,我一直在尝试通过Xcode将编译器标志直接传递给编译器。这些标志是:-fprofile arcs-ftest覆盖率

我没有修改xcodeproj的自由,这就是为什么我想通过xcodebuild命令注入这些标志

可能是这样的:

xcodebuild -project path/to/my.xcodeproj -scheme MyApp -fprofile-arcs -ftest-coverage

这可行吗?如何?

显然,大多数编译器标志都可以表示为常量,并且可以通过xcodebuild轻松地传递给编译器

要获得它们,只需在xcode build settings视图中选择该选项,然后点击command-C copy。在我的例子中,它们是GCC_生成_测试_覆盖率_文件和GCC_仪器_程序_流_弧

我的命令大致如下所示:

xcodebuild GCC_GENERATE_TEST_COVERAGE_FILES=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES ...

是的,所有编译器设置实际上都归结为字符串键值对。我回答了一个非常类似的问题,关于从命令行设置预处理器宏,它同样适用于您要设置的这些设置:

我还想提醒大家注意${inherited}的使用——使用这个值可以使用Xcode项目指定的值并附加自己的值。每个生成设置(包括通过复制粘贴找到的设置)的文档可在此处找到:


很高兴您能够让它工作-现在您可以真正让xcodebuild为您做更多,而无需更改目标Xcode项目

要使用xcodebuild设置编译器标志,需要将它们放在OTHERCFLAGS选项中

例如:

xcodebuild -project path/to/my.xcodeproj -scheme MyApp \
    OTHERCFLAGS="-fprofile-arcs -ftest-coverage"

尝试使用其他参数设置它们。其他参数已经在xcodeproj设置中使用。遗憾的是:我得到了一个解决方案:看下面。注意,这个答案可能会导致混淆。这里并不是真正传递编译器标志,而是覆盖某些Xcode环境标志的值,这些标志反过来设置相应的编译器标志。如果您想设置一些自定义编译器标志,那么您需要覆盖其他\u CFLAGS env var。这应该是其他\u CFLAGS,而不是其他CFLAGS。还应该注意的是,如果这个值在项目中已经存在,那么之前的值将被清除。xcodebuild-showBuildSettings将生成其他\u CFLAGS=-fvisibility=hidden。需要进行测试以确定是否覆盖或附加了现有标志。