C++ 如何判断编译环境为 Swift Package Manager 实现头文件条件引入
可行实现方案
你需要的功能完全可以实现,Swift Package Manager 本身就提供了官方的编译环境识别宏:
- SPM 会为所有通过它编译的 C/C++/Objective-C/Swift 目标自动预定义
SWIFT_PACKAGE宏,无需额外手动配置。
你示例代码中的宏名使用有误,将SWIFT_PACKAGE_MANAGER替换为系统自带的SWIFT_PACKAGE即可正常生效,正确写法如下:
#if defined(_WIN32) || defined(_WIN64) || (defined(__APPLE__) && defined(SWIFT_PACKAGE)) #include <MyFile.h> #endif
上述逻辑的运行效果完全匹配你的需求:
- Windows 平台无论用什么包管理器都会引入头文件
- 苹果平台下,只有通过 SPM 编译时才会引入头文件,PMX 等其他编译环境下会自动跳过引入
备选兼容方案
如果你想保留原来的SWIFT_PACKAGE_MANAGER宏名做自定义标识,也可以在 SPM 的包配置中显式增加宏定义:
在你的Package.swift对应目标的cSettings中添加如下配置即可:
.target( name: "你的C++目标名", cSettings: [ .define("SWIFT_PACKAGE_MANAGER") ] )
配置后你最开始写的判断逻辑也可以正常运行。
内容的提问来源于stack exchange,提问作者Richard Topchii
相关产品推荐
相关产品推荐

