强制 scons 附加后缀。

Force scons append suffix anyway.

通常scons会自动附加后缀,fx SConstruct

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

会生成静态库 libfoo.afoo.lib 或平台喜欢的任何内容,但如果库的基本名称似乎已经有扩展名,则不会发生这种情况。 fx SConstruct 文件

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

产生 libfoo.bar(我猜它会产生 foo.bar 使用 MS 工具链)。

我想要的是使用 GNU 工具链生成 libfoo.bar.a 并使用 MS 工具链(等等)生成 foo.bar.lib。有没有(简单的)方法可以做到这一点?

请注意,这样做是行不通的

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

因为它会使用 GNU 工具链生成 libfoo.bar.a,但我猜它会使用 MS 工具链生成 foo.bar.a(而不是我想要的 foo.bar.lib)。

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

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

通过将库的名称定义为环境变量,可以防止生成器逻辑(suffix/src_suffix 参数)检测已经存在的扩展。在处理链的后期,目标库的名称得到完全扩展,这样正确的事情就会发生。