2014-11-24 48 views
1

我一直在OSX上玩弄Scons,并试图制作共享库(.dll,.so,.dylib)。如何停止Scons在共享库的前面添加lib

除了一件让我非常讨厌的事情之外,它的所有工作都很完美,它在库名称前添加了'lib'。例如,我选择名称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) 

我不是超级懂行的有关共享库的工作原理,所以我不知道如果我编译后可以更改名称。但我希望它不会添加字母

回答

6

在每个环境中,SCons使用变量来指定库和程序之类的东西的前缀和后缀。这些变量初始化获得基于它目前在...运行检测平台上,但你可以简单地环境的号召后,将覆盖此设置()构造函数:

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

对于“达尔文”般的系统, 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)中找到标准变量的列表。

+0

非常感谢你,你是一个绅士和学者! – 2014-11-25 00:17:02