如果我有这个SConstruct文件:
env = Environment()
mylib = env.SharedLibrary(target='mylib', source='mylib.c')
print mylib[0].name
这将在Linux上打印libmylib.so
,在Windows上打印mylib.dll
。
从SharedLibrary返回的值是否有任何属性将返回我传入的原始目标名称?
答案 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')
中一样。实际上,目标不需要是文件!它可能是一个目录,或甚至是一个价值。所以一般来说,我会问你为什么要这样做 - 可能有更好的方法来解决你的问题。