如何使scons附加正斜杠' /'在libpath中

时间:2016-04-21 13:13:54

标签: python c++ macos g++ scons

我一直在努力解决我在与SCons合作时遇到的最小问题,但这种琐碎似乎并不像问题本身那样容易消失。

所以情况就是这样。

当我在XCode的一个系统库中的libpath末尾添加一个正斜杠时,我有一个完美编译的项目。

当我把它交给SCons时,它会有一些如何剥离并调用g ++ -out而没有斜杠。

当我手动使用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...

一切都很完美。

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

非常感谢你们提前!

1 个答案:

答案 0 :(得分:2)

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

这使得SConstruct的可移植性稍差,因为您必须自己指定命令行选项。

SConstruct:

# 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 上的尾随空格已保留。

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