SCons编译时如何为不同源文件设置差异化CPPPATH包含路径
解决方案
方案1:直接为指定源文件设置私有编译参数
SCons原生支持对单个构建目标单独传入构造变量,无需修改全局环境的配置即可实现需求,示例代码如下:
env = Environment() # 配置全局公共头文件路径 env.Append(CPPPATH = ['mypath/include']) # 编译不需要第三方头文件的源文件,直接使用全局环境 one_o = env.Object('one.o', 'one.c') two_o = env.Object('two.o', 'two.c') # 编译需要第三方头文件的源文件,单独传入额外的头文件路径 thirdparty_o = env.Object('thirdpartyinterface.o', 'thirdparty.c', CPPPATH = env['CPPPATH'] + ['thirdpartypath/include']) # 链接生成最终可执行文件 env.Program('theexe', [one_o, two_o, thirdparty_o])
调用Object方法时传入的CPPPATH会覆盖全局环境的对应配置,仅对当前编译目标生效,完全匹配你预期的编译逻辑。
方案2:编译为独立静态库(更适合模块化项目)
如果第三方接口代码是独立模块,抽成静态库维护性更强,实现方式如下:
env = Environment() env.Append(CPPPATH = ['mypath/include']) # 编译普通业务代码目标 one_o = env.Object('one.o', 'one.c') two_o = env.Object('two.o', 'two.c') # 克隆独立环境编译第三方接口静态库,不会影响全局环境配置 thirdparty_env = env.Clone() thirdparty_env.Append(CPPPATH = ['thirdpartypath/include']) thirdparty_lib = thirdparty_env.StaticLibrary('thirdpartyinterface', ['thirdparty.c']) # 链接时直接引入静态库即可 env.Program('theexe', [one_o, two_o, thirdparty_lib])
该方案适合后续有多个源文件需要依赖第三方头文件的场景,无需为每个目标单独传参,配置更统一。
内容的提问来源于stack exchange,提问作者Be Kind To New Users
相关产品推荐
相关产品推荐

