在使用SCON时,如何将--start group和--end group标志传递给gcc?

在使用SCON时,如何将--start group和--end group标志传递给gcc?,gcc,scons,Gcc,Scons,在SCON中,如何实现--start group和--end group gcc标志?这些应该包装一组特定的LIBS,但是我找不到一个前缀/后缀选项来包装LIBS的整个(或部分)输入 如果您想知道我在说什么gcc标志,请在此处阅读更多内容: 您是对的,这个包装没有内置的前缀/后缀。指定传递给link命令的库列表的命令行选项基于LIBS环境变量计算,并存储在\u LIBFLAGS环境变量中\u LIBFLAGS然后用作完整链接器命令行的一部分 在SCons库的Tool/link.py中定义的默认值

在SCON中,如何实现--start group和--end group gcc标志?这些应该包装一组特定的LIBS,但是我找不到一个前缀/后缀选项来包装LIBS的整个(或部分)输入

如果您想知道我在说什么gcc标志,请在此处阅读更多内容:


您是对的,这个包装没有内置的前缀/后缀。指定传递给link命令的库列表的命令行选项基于
LIBS
环境变量计算,并存储在
\u LIBFLAGS
环境变量中<代码>\u 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
\u LIBFLAGS
变量来添加选项:

# SConstruct

env = Environment(
    CC = 'gcc',
    LINKCOM = '$LINK -o $TARGET $LINKFLAGS $__RPATH $SOURCES $_LIBDIRFLAGS -Wl,--start-group $_LIBFLAGS -Wl,--end-group'
)

#env.Prepend(_LIBFLAGS="-Wl,--start-group ")  # the trailing space is required
#env.Append(_LIBFLAGS=" -Wl,--end-group")     # the leading space is required
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
函数。是否搜索了scons用户组邮件列表存档。我想这已经包括在内了。这并不简单,但可以做到。通常这意味着您有递归依赖项,需要它来解决这些混乱。。。是这样吗?