如何在 SCons 中将标志应用到库?
How do I apply a flag to a library in SCons?
我需要执行类似于以下的构建命令:
g++ -Wl,-rpath=../libs source.o -static -Wl,-Bdynamic -ldynlib -Wl,-Bstatic -lstaticlib
我当前的(错误的)SConscript links 在 dynlib 中的这一行:
env.AppendUnique(LINKFLAGS=['-Wl,-Bdynamic', '-ldynlib']);
但是当我 运行 scons 时,我得到这个:
g++ -Wl,-rpath=../libs -static -Wl,-Bdynamic -ldynlib source.o -Wl,-Bstatic -lstaticlib
因为source.o在dynlib之后,找不到dynlib,所以会出现link错误。解决方案(手动验证)是将 source.o 移到 dynlib 之前,这是一个供应商提供的库。
理想情况下,我会将 dynlib 添加到 LIBS,但 SCons 似乎不支持那里的标志。
我可以使用什么解决方法让 SCons 生成正确的构建行?
事实证明,文字是解决方案。无论出于何种原因,SCons 现在不会在我的标志前添加“-l”。
env['FORCEDYNAMIC'] = env.Literal('-Wl,-Bdynamic')
env.PrependUnique(LIBS = [['${FORCEDYNAMIC}', 'dynlib']])
我需要执行类似于以下的构建命令:
g++ -Wl,-rpath=../libs source.o -static -Wl,-Bdynamic -ldynlib -Wl,-Bstatic -lstaticlib
我当前的(错误的)SConscript links 在 dynlib 中的这一行:
env.AppendUnique(LINKFLAGS=['-Wl,-Bdynamic', '-ldynlib']);
但是当我 运行 scons 时,我得到这个:
g++ -Wl,-rpath=../libs -static -Wl,-Bdynamic -ldynlib source.o -Wl,-Bstatic -lstaticlib
因为source.o在dynlib之后,找不到dynlib,所以会出现link错误。解决方案(手动验证)是将 source.o 移到 dynlib 之前,这是一个供应商提供的库。
理想情况下,我会将 dynlib 添加到 LIBS,但 SCons 似乎不支持那里的标志。
我可以使用什么解决方法让 SCons 生成正确的构建行?
事实证明,文字是解决方案。无论出于何种原因,SCons 现在不会在我的标志前添加“-l”。
env['FORCEDYNAMIC'] = env.Literal('-Wl,-Bdynamic')
env.PrependUnique(LIBS = [['${FORCEDYNAMIC}', 'dynlib']])