Xcode 7:为每个架构设置预处理器宏
Xcode 7: Set Preprocessor Macros per architecture
我需要在 Xcode
中设置 Preprocessor Macro
只是为了特定的体系结构 (arm64)。我怎样才能做到这一点?
Whosebug 上也有类似的问题:。
但就我而言 Xcode 7
就是不允许我选择架构。在 Xcode
版本 7.1.1
和 7.3.1
上尝试了相同的结果:Xcode 提供的唯一体系结构选项是“*”(见下图)。
Preprocessor settings section
以防万一,这是我的架构设置:
Architectures settings section
为了让您更好地理解我为什么需要这个:
我使用依赖于标志集的第 3 方 C 库来告诉它它在 32 位或 64 位平台上是 运行 。
库集成指南中的注释:“为 64 位架构构建时,必须在 Xcode 的预处理器宏部分添加 _64BIT
宏。”
所以这是我尝试过的:
- 在 Xcode UI 中找到一种设置特定于体系结构的宏的方法(如上所述)
- 通过将
GCC_PREPROCESSOR_DEFINITIONS
[arch=*] 替换为 GCC_PREPROCESSOR_DEFINITIONS
[arch=arm64] 手动修改 .pbxproj
文件(未达到预期效果)
你知道我的 Xcode
设置有什么问题吗,为什么它不在 Preprocessor
部分显示体系结构选项?或者在我的情况下还有其他配置宏的方法吗?
我终于想通了。
取得的结果: _64BIT 宏将在预处理期间添加到每个(至少今天已知的)64 位环境,无论它是 64 位设备的模拟器或真正的 64 位设备。
解决办法是手动编辑.pbxproj-file如下:
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
"GCC_PREPROCESSOR_DEFINITIONS[arch=arm64]" = (
"$(inherited)",
_64BIT,
);
"GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64]" = (
"$(inherited)",
_64BIT,
);
这里是调试配置:
- 第一部分定义了适用于所有架构的默认宏;
- 第二个和第三个定义了仅适用于特定架构的自定义宏。
然后您手动完成的更改将在预处理器设置编辑器中可见。
看起来确实像编辑器中 Xcode 中的错误。
您可以注意到我在发布问题之前已经尝试过这种方法,但是我误解了我尝试的结果。问题是我已经在模拟器上测试了我的应用程序,并且在真实设备和相应的模拟器上的架构是不同的。我已将宏配置为包含在 arm64 架构中,但模拟器的实际架构是 x86_64.
为了进一步参考,this 文章解释了每种架构实际发生的位置:
- arm7:用在最早的iOS 7-supporting devices
- arm7s:用于 iPhone 5 和 5C
- arm64:对于 iPhone 5S 中的 64 位 ARM 处理器 [ 我相信更新的 iPhones][=40 也是如此=]
- i386: 对于 32 位模拟器
- x86_64:在64位模拟器中使用
对于 i386 和 x86_64 "bitness" 的模拟设备是隐含在这里,而不是你的 Mac 的。
我需要在 Xcode
中设置 Preprocessor Macro
只是为了特定的体系结构 (arm64)。我怎样才能做到这一点?
Whosebug 上也有类似的问题:Xcode 7
就是不允许我选择架构。在 Xcode
版本 7.1.1
和 7.3.1
上尝试了相同的结果:Xcode 提供的唯一体系结构选项是“*”(见下图)。
Preprocessor settings section
以防万一,这是我的架构设置: Architectures settings section
为了让您更好地理解我为什么需要这个:
我使用依赖于标志集的第 3 方 C 库来告诉它它在 32 位或 64 位平台上是 运行 。
库集成指南中的注释:“为 64 位架构构建时,必须在 Xcode 的预处理器宏部分添加 _64BIT
宏。”
所以这是我尝试过的:
- 在 Xcode UI 中找到一种设置特定于体系结构的宏的方法(如上所述)
- 通过将
GCC_PREPROCESSOR_DEFINITIONS
[arch=*] 替换为GCC_PREPROCESSOR_DEFINITIONS
[arch=arm64] 手动修改.pbxproj
文件(未达到预期效果)
你知道我的 Xcode
设置有什么问题吗,为什么它不在 Preprocessor
部分显示体系结构选项?或者在我的情况下还有其他配置宏的方法吗?
我终于想通了。
取得的结果: _64BIT 宏将在预处理期间添加到每个(至少今天已知的)64 位环境,无论它是 64 位设备的模拟器或真正的 64 位设备。
解决办法是手动编辑.pbxproj-file如下:
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
"GCC_PREPROCESSOR_DEFINITIONS[arch=arm64]" = (
"$(inherited)",
_64BIT,
);
"GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64]" = (
"$(inherited)",
_64BIT,
);
这里是调试配置:
- 第一部分定义了适用于所有架构的默认宏;
- 第二个和第三个定义了仅适用于特定架构的自定义宏。
然后您手动完成的更改将在预处理器设置编辑器中可见。 看起来确实像编辑器中 Xcode 中的错误。
您可以注意到我在发布问题之前已经尝试过这种方法,但是我误解了我尝试的结果。问题是我已经在模拟器上测试了我的应用程序,并且在真实设备和相应的模拟器上的架构是不同的。我已将宏配置为包含在 arm64 架构中,但模拟器的实际架构是 x86_64.
为了进一步参考,this 文章解释了每种架构实际发生的位置:
- arm7:用在最早的iOS 7-supporting devices
- arm7s:用于 iPhone 5 和 5C
- arm64:对于 iPhone 5S 中的 64 位 ARM 处理器 [ 我相信更新的 iPhones][=40 也是如此=]
- i386: 对于 32 位模拟器
- x86_64:在64位模拟器中使用
对于 i386 和 x86_64 "bitness" 的模拟设备是隐含在这里,而不是你的 Mac 的。