如何阻止Scons在共享库的前面添加lib

时间:2014-11-24 23:34:36

标签: c++ macos dll scons dylib

我一直在和OSX上的Scons一起玩,而我正试图创建一个共享库(.dll,.so,.dylib)。

除了一件真让我烦恼的事情之外,它完美地完成了工作,它增加了“自由”。在图书馆名称前面。例如,我选择名称 WL ,它变为 libWL.dylib 。我无法解释为什么Scons这样做,这让我很生气。

enter image description here

我使用的代码是:

# -*- coding: utf-8 -*-
import os
SourceList = ['Window.cpp']
env = Environment(ENV = os.environ)

#Libraries we are using
Targets = 'WL'
libraries = ['SDL2']

#Paths to the libraries and include paths
Paths = ['/usr/local/lib', '/usr/local/include']

Export('SourceList env libraries Paths Targets')
SConscript('src/SConscript', variant_dir='bin', duplicate=0)

Import('SourceList env libraries Paths Targets')
SharedLibrary(target = Targets,source = SourceList,LIBS = libraries, LIBPATH=Paths)

我不太了解共享库的工作方式,所以我不知道在编译之后是否可以更改名称。但我希望它不添加字母

1 个答案:

答案 0 :(得分:6)

在每个环境中,SCons使用变量来指定库和程序之类的前缀和后缀。这些变量基于其当前正在运行的检测到的平台进行初始化...但您可以在调用Environment()构造函数后简单地覆盖此设置:

env = Environment()
env['SHLIBPREFIX'] = ''

对于" darwin"类系统,SCons称之为标准" posix"首先初始化...那是默认" lib"前缀来自。

提示:您可以将环境视为字典(哈希映射),并将其值设置为您需要的值。要显示其当前内容,您可以使用Dump()方法:

print env.Dump()

在SConstruct / SConscript中,它为您提供已定义变量的完整列表。 您可以在MAN页面(http://scons.org/doc/production/HTML/scons-man.html)和UserGuide(http://scons.org/doc/production/HTML/scons-user.html)中找到标准变量列表。