首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用scon的时候,如何将开始组和结束组的旗传递给gcc?

在使用scon的时候,如何将开始组和结束组的旗传递给gcc?
EN

Stack Overflow用户
提问于 2016-03-13 03:50:02
回答 1查看 1.1K关注 0票数 4

在scons中,如何实现--开始组和结束组gcc旗?这些应该包装一组特定的LIBS,但是我找不到前缀/后缀选项来包装整个(或部分) LIBS输入。

如果你想知道我说的gcc旗是什么,请在这里读更多:

GCC: what are the --start-group and --end-group command line options?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-14 16:44:43

您说得对,这个包装器没有内置前缀/后缀。指定传递给链接命令的库列表的命令行选项是基于LIBS环境变量计算的,并存储在_LIBFLAGS环境变量中。然后,_LIBFLAGS作为完整链接器命令行的一部分使用。

在SCons库中的Tool/like. in中定义的默认值如下所示:

代码语言:javascript
复制
env['LINKCOM']  = '$LINK -o $TARGET $LINKFLAGS $__RPATH $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
env['_LIBFLAGS']='${_stripixes(LIBLINKPREFIX, LIBS, LIBLINKSUFFIX, LIBPREFIXES, LIBSUFFIXES, __env__)}'

假设您想包装整个库集,那么在您的环境中,您可以编辑LINKCOM_LIBFLAGS变量来添加选项:

代码语言:javascript
复制
# 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的侵入性要小一些。在我的简单示例中,这将生成:

代码语言:javascript
复制
$ 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函数。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35966243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档