通常情况下,scons会自动追加后缀,fx是SConstruct
StaticLibrary("foo", ["t.c"])
会产生静态库libfoo.a
或foo.lib
或者任何平台的幻想,但是如果库的基本名称似乎已经有了扩展,那么这将不会发生。 fx SConstruct文件
StaticLibrary("foo.bar", ["t.c"])
生成libfoo.bar
(我猜它会使用MS工具链生成foo.bar
。
我想要的是使用GNU工具链生成libfoo.bar.a
和使用MS工具链生成foo.bar.lib
(依此类推)。是否有(简单)方法来实现这一目标?
请注意,它无法完成
StaticLibrary("foo.bar.a", ["t.c"])
因为它会根据需要使用GNU工具链生成libfoo.bar.a
,但我猜它会产生foo.bar.a
MS工具链(而不是我想要的foo.bar.lib
)。
答案 0 :(得分:2)
这是我现在能想到的最简单的解决方法:
env = Environment()
env['MYLIB'] = "foo.bar"
t = env.StaticLibrary('${MYLIB}', Glob('*.cpp'))
通过将库的名称定义为环境变量,可以防止Builder逻辑(后缀/ src_suffix参数)检测到现有的扩展。稍后在处理链中,目标库的名称将完全展开,以便正确发生。