我开始使用 xcconfig 文件进行环境特定的构建设置,我注意到字符串引号是按字面解释的。
例如
APP_BUNDLE_DISPLAYNAME_SUFFIX = "DEBUG"
将显示应用程序名称MyApp "DEBUG"作为显示名称(带引号)
如何处理 xcconfig 文件中的字符串,它们是否是定义字符串所必需的?如果不是,你如何处理空白和逃逸?有什么需要注意的特殊字符吗?
答案是,这取决于您尝试更改的实际构建设置及其使用位置。
正如您所观察到的,像这样的设置APP_BUNDLE_DISPLAYNAME_SUFFIX只能采用单个单词,因此在此处添加引号只会导致 Xcode 将它们合并到设置的值中。
然而,在其他地方却有所不同。特别是,如果在构建期间将设置传递到工具链上。在这些情况下,您必须对 Xcode和命令行使用引用和转义。
例如:如果您想使用 xcconfig 文件来设置预处理器定义(即宏)并且您想定义字符串宏,则必须对引号进行转义,以便 shell 不会删除它们,并且如果您在那么你还必须转义这些字符串,因为 Xcode 在内部解释它们。
假设您的代码中有:
#ifdef MY_MACRO1
const char *my_url = MY_MACRO2;
#endif
Run Code Online (Sandbox Code Playgroud)
然后这个 xcconfig 文件就可以正常工作了:
//
// my_string_macro.xcconfig
//
GCC_PREPROCESSOR_DEFINITIONS=MY_MACRO1 MY_MACRO2="\"https:\/\/stackoverflow.com\/questions\/30926076\/\""
Run Code Online (Sandbox Code Playgroud)
Xcode 的构建设置检查器将显示最外面两个双引号之间的值不变,但它会在编译过程中被正确解释,从而导致编译日志中出现类似以下内容:
clang -x objective-c++ -DMY_MACRO1 -DMY_MACRO2=\"/sf/ask/2164825351/\"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1911 次 |
| 最近记录: |