如何让 scons 在 libpath 中附加一个正斜杠'/'

How to make scons append a forward slash '/' in the libpath

我一直在努力解决我在使用 SCons 时处理过的最小的问题,但这种琐碎的事情似乎并没有像问题本身那样轻易消失。

情况是这样的。

当我在 XCode.

的系统库之一的 libpath 末尾附加一个正斜杠时,我有一个项目可以完美编译

当我将其提供给 SCons 时,它会以某种方式去除斜杠并调用不带斜杠的 g++ 输出。

当我手动使用它用斜杠调用的 g++ 命令时,它起作用了。

以下是帮助您理解的代码片段。

这是附加库的代码:

env.AppendUnique(LIBPATH = [r'/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/usr/lib/system/'])

如你所见,我在 'usr/lib/system' 后面加了一个斜杠。

这是 SCons 调用的 g++ 命令:

g++ -o output.dylib stuff.os -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/usr/lib/system -otherstuff...

如您所见,斜杠在最后被绊倒了。

所以如果我这样做:

g++ -o output.dylib stuff.os -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/usr/lib/system/ -otherstuff...

一切正常。

关于如何解决这个愚蠢新手的愚蠢问题有什么想法吗?

非常感谢你们!

正如您所注意到的,SCons 在构建 link 命令时对库路径进行了一些解释。您可以通过直接通过 LINKFLAGS 环境变量向 link 命令提供标志来解决此问题,绕过导致问题的路径 LIBPATH

这会降低您的 SConstruct 的可移植性,因为您必须自己指定命令行选项。

S构造:

# SConstruct
libdir1 = '/Users/dave/lib1/'
libdir2 = '/Users/dave/lib2/'
env = Environment(LIBPATH = libdir1, LINKFLAGS = ['-L' + libdir2])
program = env.Program('test', 'test.c')

生成以下输出:

$ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o test.o -c test.c
gcc -o test -L/Users/dave/lib2/ test.o -L/Users/dave/lib1
scons: done building targets.

请注意 lib2 上的尾随 space 已保留。

我不清楚为什么会发生此错误,根本原因值得进一步调查。