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

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

本文关键字:scons 何使 libpath      更新时间:2023-10-16

我一直在努力解决我在使用 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...

一切都很完美。

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

提前非常感谢你们!

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

这使得您的 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 上的尾随空格被保留。

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