macOS系统级Objective-C模块定义位置及自定义模块相关操作咨询
macOS下Objective-C模块相关问题解答
查看全局可用的modulemap
要找到macOS上Objective-C全局可用的modulemap文件,可以通过以下两种方式:
- 使用Clang命令查看搜索路径:执行
clang -v -E -x objective-c /dev/null,在输出的#include <...> search starts here:部分,列出的所有目录中,后缀为.modulemap或名为module.modulemap的文件就是全局模块的定义文件。 - 直接查看Xcode SDK目录:全局模块大多位于Xcode的macOS SDK路径下,典型路径为
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include,以及各个系统框架的目录(比如System/Library/Frameworks下的框架文件夹),这些目录中都包含对应模块的modulemap。
自行添加自定义模块
完全可以添加自定义模块,步骤如下:
- 创建
module.modulemap文件,定义你的模块规则,示例:
其中module MyCustomModule { header "MyCustomHeader.h" export * }MyCustomHeader.h是你要暴露的头文件,export *表示导出头文件里的所有内容。 - 将
module.modulemap和对应的头文件放在同一个目录下,比如~/MyCustomModules/。 - 编译时指定模块路径:
- 命令行编译:使用
clang -fmodule-map-file=~/MyCustomModules/module.modulemap yourfile.m - Xcode中配置:在项目的Build Settings里,找到
Swift Compiler - Search Paths下的Import Paths,添加你的自定义模块目录;或者在Other C Flags中加入-I~/MyCustomModules/(当头文件和modulemap同目录时)。
- 命令行编译:使用
- 配置完成后,就能在代码中通过
@import MyCustomModule;引入并使用自定义模块。
Foundation模块的具体位置
代码中@import Foundation;对应的模块来源如下:
- 框架二进制文件:位于macOS SDK的框架目录,典型路径为:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework - modulemap文件:通常在Foundation框架的Headers目录下,具体路径为:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/module.modulemap
你也可以通过编译命令验证:执行clang -v -x objective-c -fsyntax-only 你的代码文件.m,在输出中会看到Clang加载Foundation模块时的具体路径。
内容的提问来源于stack exchange,提问作者Aleksandr Medvedev
相关产品推荐
相关产品推荐

