如何用Boost Build/B2/BJam简化跨OS依赖库配置?
简化Boost Build跨平台库依赖配置
你遇到的问题是因为Boost Build的sources参数不支持直接嵌入<target-os>这类条件属性,所以第一种写法会报错。重复定义目标的方式虽能运行,但代码冗余度太高,用**条件依赖(conditional requirements)**就能解决这个问题,只需要单份lib定义:
lib MyLib : $(SOURCES) $(COMMON_LIBS) : <target-os>windows:<library>$(WINDOWS_LIBS) ;
原理是把平台相关的附加库配置放到requirements参数(lib定义的第三个部分)里,这里支持用条件属性指定规则:当目标系统为Windows时,自动引入$(WINDOWS_LIBS)中的库。
如果需要支持多操作系统的不同依赖,直接追加条件即可:
lib MyLib : $(SOURCES) $(COMMON_LIBS) : <target-os>windows:<library>$(WINDOWS_LIBS) <target-os>linux:<library>$(LINUX_LIBS) <target-os>macos:<library>$(MACOS_LIBS) ;
这样既避免了重复代码,又能正确实现跨平台的依赖区分。
内容的提问来源于stack exchange,提问作者Gabriel Devillers
相关产品推荐
相关产品推荐

