您说得对,这个包装器没有内置的前缀/后缀。指定传递给链接命令的库列表的命令行选项是基于LIBS
环境变量计算的,并存储在_LIBFLAGS
环境变量中。然后,_LIBFLAGS
作为完整链接器命令行的一部分使用。
在SCons库中的Tool/link.py中定义的默认值大致如下:
env['LINKCOM'] = '$LINK -o $TARGET $LINKFLAGS $__RPATH $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
env['_LIBFLAGS']='${_stripixes(LIBLINKPREFIX, LIBS, LIBLINKSUFFIX, LIBPREFIXES, LIBSUFFIXES, __env__)}'
假设您想要包装整个库集,那么在您的环境中,您可以编辑
LINKCOM
变量或者
_LIBFLAGS
变量以添加选项。
env = Environment(
CC = 'gcc',
LINKCOM = '$LINK -o $TARGET $LINKFLAGS $__RPATH $SOURCES $_LIBDIRFLAGS -Wl,--start-group $_LIBFLAGS -Wl,--end-group'
)
env.Program('foo', ['foo.c'], LIBS='m')
我认为编辑LINKCOM
的影响较小。在我的简单示例中,这会生成:
$ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o foo.o -c foo.c
gcc -o foo foo.o -Wl,--start-group -lm -Wl,--end-group
scons: done building targets.
如果你只想对一部分库进行分组,那么你需要为“封装”和“未封装”的库使用分开的LIBS
变量,并在附加到LINKCOM
的一个单独变量中复制_LIBFLAGS
函数。