如何在 xcconfig 和引号中定义字符串
how to define strings in xcconfig and quotes
我已经开始使用 xcconfig 文件进行特定于环境的构建设置,我注意到字符串引号是按字面解释的。
例如
APP_BUNDLE_DISPLAYNAME_SUFFIX = "DEBUG"
将显示 MyApp "DEBUG"
的应用程序名称作为显示名称(带引号)
你如何处理 xcconfig 文件中的字符串,它们是否是定义字符串所必需的?如果不是,你如何处理空白和转义?有什么特殊字符需要注意吗?
答案是,这取决于您尝试更改的实际构建设置,以及它的使用位置。
如您所见,像 APP_BUNDLE_DISPLAYNAME_SUFFIX
这样的设置只能包含一个单词,因此在此处添加引号只会导致它们被 Xcode 合并到设置的值中。
但是,在其他地方就不一样了。特别是,如果在构建期间将设置传递到工具链。在这些情况下,您必须对命令行 Xcode AND 使用引号和转义。
例如:如果你想使用 xcconfig 文件来设置预处理器定义(即宏)并且你想定义一个字符串宏,你必须转义引号,这样 shell 就不会剥离它们,如果字符串中有斜杠,那么您还必须转义它们,因为 Xcode 在内部解释它们。
假设您的代码中有:
#ifdef MY_MACRO1
const char *my_url = MY_MACRO2;
#endif
那么这个 xcconfig 文件将正常工作:
//
// my_string_macro.xcconfig
//
GCC_PREPROCESSOR_DEFINITIONS=MY_MACRO1 MY_MACRO2="\"https:\/\/whosebug.com\/questions\/30926076\/\""
Xcode 的 Build Settings inspector 将显示最外层两个双引号之间的值不变,但它会在编译期间被正确解释,导致编译日志中出现如下内容:
clang -x objective-c++ -DMY_MACRO1 -DMY_MACRO2=\""
我已经开始使用 xcconfig 文件进行特定于环境的构建设置,我注意到字符串引号是按字面解释的。
例如
APP_BUNDLE_DISPLAYNAME_SUFFIX = "DEBUG"
将显示 MyApp "DEBUG"
的应用程序名称作为显示名称(带引号)
你如何处理 xcconfig 文件中的字符串,它们是否是定义字符串所必需的?如果不是,你如何处理空白和转义?有什么特殊字符需要注意吗?
答案是,这取决于您尝试更改的实际构建设置,以及它的使用位置。
如您所见,像 APP_BUNDLE_DISPLAYNAME_SUFFIX
这样的设置只能包含一个单词,因此在此处添加引号只会导致它们被 Xcode 合并到设置的值中。
但是,在其他地方就不一样了。特别是,如果在构建期间将设置传递到工具链。在这些情况下,您必须对命令行 Xcode AND 使用引号和转义。
例如:如果你想使用 xcconfig 文件来设置预处理器定义(即宏)并且你想定义一个字符串宏,你必须转义引号,这样 shell 就不会剥离它们,如果字符串中有斜杠,那么您还必须转义它们,因为 Xcode 在内部解释它们。
假设您的代码中有:
#ifdef MY_MACRO1
const char *my_url = MY_MACRO2;
#endif
那么这个 xcconfig 文件将正常工作:
//
// my_string_macro.xcconfig
//
GCC_PREPROCESSOR_DEFINITIONS=MY_MACRO1 MY_MACRO2="\"https:\/\/whosebug.com\/questions\/30926076\/\""
Xcode 的 Build Settings inspector 将显示最外层两个双引号之间的值不变,但它会在编译期间被正确解释,导致编译日志中出现如下内容:
clang -x objective-c++ -DMY_MACRO1 -DMY_MACRO2=\""