Ale*_*der 6 naming-conventions shared-libraries scons
我正在使用scons实用程序生成共享库.当我写下面的规则时:
SharedLibrary('hello','hello.c')
我会得到``libhello.so''文件.
有没有办法自动获取像``libhello.so.version'这样的文件?
版本化的库已经很好地集成到SCons 2.3.0中:
version = "1.2.3"
lib = env.SharedLib(target='name', sources, SHLIBVERSION=version)
# generates in linux:
# name.so -> name.so.1
# name.so.1 -> name.so.1.2.3
# name.so.1.2.3
installed = env.InstallVersionedLib(os.path.join(INSTALPREFIX,"lib"), lib, SHLIBVERSION=version)
# generates in linux if INSTALLPREFIX = /usr/local/lib and --install_sandbox=mysandbox given:
# mysandbox/usr/local/libname.so -> name.so.1
# mysandbox/usr/local/name.so.1 -> name.so.1.2.3
# mysandbox/usr/local/name.so.1.2.3
Run Code Online (Sandbox Code Playgroud)
SCons 2.3.0仍然存在一些错误:库重建失败,因为符号链接创建依赖于os.symlink,如果链接已经存在,则会失败.这已在当前开发版本中修复.您可以通过添加以下行来修补本地2.3.0版本:
try : os.remove(whatever)
except OSError : pass
Run Code Online (Sandbox Code Playgroud)
每当在这些文件上调用os.symlink时,第二个参数都是'what':
/usr/lib/scons/SCons/Tool/install.py
/usr/lib/scons/SCons/Tool/__init__.py
Run Code Online (Sandbox Code Playgroud)
您可能想要使用libtool来处理共享库的创建和版本控制。不幸的是,您必须自己将 libtool 与 SCons 集成,因为它不是内置在软件中的。当然,原因是 libtool 是特定于平台的。
作为一种廉价的替代方案,您可以将 env['SHLIBSUFFIX'] 重写为:
Replace(SHLIBSUFFIX = '.so.$SHLIB_VERSION')
Run Code Online (Sandbox Code Playgroud)
然后,您可以为每个目标独立地重写 $SHLIB_VERSION 构造变量:
SharedLibrary('hello', 'hello.c', SHLIB_VERSION = 1)
Run Code Online (Sandbox Code Playgroud)