无论如何,强制scons附加后缀。

时间:2015-09-07 07:43:20

标签: cross-platform scons

通常情况下,scons会自动追加后缀,fx是SConstruct

 StaticLibrary("foo", ["t.c"])

会产生静态库libfoo.afoo.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)。

1 个答案:

答案 0 :(得分:2)

这是我现在能想到的最简单的解决方法:

env = Environment()
env['MYLIB'] = "foo.bar"
t = env.StaticLibrary('${MYLIB}', Glob('*.cpp'))

通过将库的名称定义为环境变量,可以防止Builder逻辑(后缀/ src_suffix参数)检测到现有的扩展。稍后在处理链中,目标库的名称将完全展开,以便正确发生。