如何使用scons获取目标的平台独立名称

时间:2014-03-18 17:05:04

标签: scons

如果我有这个SConstruct文件:

env = Environment()
mylib = env.SharedLibrary(target='mylib', source='mylib.c')
print mylib[0].name

这将在Linux上打印libmylib.so,在Windows上打印mylib.dll

从SharedLibrary返回的值是否有任何属性将返回我传入的原始目标名称?

2 个答案:

答案 0 :(得分:1)

我认为不可能获得原始目标名称,但您可以做的是获取 平台相关 库前缀和后缀并将其删除以获取原始图书馆名称。这些前缀和后缀的格式为SCons Construction Variables。您将对以下内容感兴趣:

  • LIBPREFIX - 静态库前缀

  • LIBSUFFIX - 静态库后缀

  • SHLIBPREFIX - 共享库前缀

  • SHLIBSUFFIX - 共享库后缀

在您使用共享库的情况下,您可以获得如下原始名称:

print mylib[0].name.strip(SHLIBPREFIX).rstrip(SHLIBSUFFIX)

这适用于任何平台,因为这些构造变量会根据平台而变化。

答案 1 :(得分:1)

作为目标传递的名称与实际目标节点之间在SCons中没有一般关系。通常它就像在@Brady的答案中那样简单,但是如果你在构建器中有一个发射器,那么发射器可以重命名它想要的目标,或者添加更多的目标。有时你会调用一个没有目标的构建器,只需要一个源代码,就像在env.Program('foo.c')中一样。实际上,目标不需要是文件!它可能是一个目录,或甚至是一个价值。所以一般来说,我会问你为什么要这样做 - 可能有更好的方法来解决你的问题。