我正在尝试使用SCons编译一个程序,该程序需要一组我在非标准位置安装的依赖项。
我在/ home / dja / ocr中安装了依赖项。现在我正在尝试编译主程序,无法弄清楚如何告诉SCons在哪里查找库和标题。
我已经尝试过(等等):
scons prefix=/home/dja/ocr
scons includepath=/home/dja/ocr/include libpath=/home/dja/ocr/lib
env LIBPATH=/home/dja/ocr/lib INCLUDEPATH=/home/dja/ocr/include scons
...etc...
结果总是一样的:
scons: Reading SConscript files ...
Currently supported OS version: Ubuntu 10.04
Checking for C++ library iulib... no
AssertionError: :
File "/home/dja/ocr/src/ocropus/SConstruct", line 107:
assert conf.CheckLibWithHeader("iulib","iulib/iulib.h","C++");
我无法在Google上找到答案。
使这个工作正常的SCons foo是什么?
答案 0 :(得分:5)
您需要创建一个环境并设置适当的变量:
env = Environment(
CPPPATH=['/home/dja/ocr/include'],
LIBPATH=['/home/dja/ocr/lib'],
LIBS=['iulib'])
env.Program('my_executable', Glob('*.c'))
CPPPATH指向C预处理器路径列表(注意:3 P)。 LIBPATH指向库所在的位置。最后,LIBS是一个与您的程序链接的库列表。
答案 1 :(得分:3)
与 make 及其针对某些环境变量的约定或配置的--with-X
选项不同,SConstruct的作者需要提供一种方法用户指定替代。默认情况下, scons 不会从环境中读取构建变量。
有多种方法可以处理用户配置(请参阅我刚学到的Variables),但我不了解广泛认可的约定。对于您所在位置的用户,您需要依赖撰写构建文档或体面scons --help
描述的作者,或者自己阅读SConstruct(有时您必须使用写得不好< / strike>非常规Makefiles)。
答案 2 :(得分:0)
似乎可以通过编辑SConstruct文件来完成此操作:http://osdir.com/ml/programming.tools.scons.user/2005-09/msg00060.html
这很蹩脚 - 有更好的一般方法吗?
(在这种情况下,阅读SConstruct文件显示有一个特殊的规定,专门提供依赖的路径,所以我已经解决了当前的问题,但不是一般问题。)
答案 3 :(得分:0)
我发现传递LINKPATH =“ - L / blah /”作为scons工作的环境变量,当传递LDFLAGS =“ - L / blah /”时没有。
答案 4 :(得分:0)
sudo scons --32 --libpath = / home / test / project / stage / lib / --cpppath = / home / test / project / boost / --prefix = / home / test / mongClient / output - dbg = on --opt = on install
其中libpath用于从非标准位置链接库。 cpppath用于包含来自非标准位置的头文件。