3

我正在尝试使用 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++");  

我一直无法在谷歌上找到答案。

什么是正确的 SCons foo 让它工作?

4

5 回答 5

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 是与您的程序链接的库列表。

于 2011-01-19T02:18:52.717 回答
3

make及其对某些环境变量或配置--with-X选项的约定不同,SConstruct 的作者需要为用户提供一种指定覆盖的方法。默认情况下,scons不会从环境中读取构建变量。

处理用户配置的方法有很多种(请参阅我刚刚了解的变量),但我不知道广为接受的约定。对于处于您位置的用户,您需要依靠作者编写构建文档或体面的scons --help描述,或者求助于自己阅读 SConstruct(有时您不得不求助于写得很糟糕的非常规 Makefile)。

顺便说一句,如果我对 scons 的了解已经过时,我很乐意对此进行纠正。

于 2011-01-13T18:21:20.523 回答
0

似乎可以通过编辑 SConstruct 文件来做到这一点:http: //osdir.com/ml/programming.tools.scons.user/2005-09/msg00060.html

这很蹩脚-有更好的通用方法吗?

(在这种情况下,读取 SConstruct 文件显示有一项特殊规定专门提供了依赖项的路径,因此我解决了当前的问题,但没有解决一般问题。)

于 2011-01-13T10:15:01.750 回答
0

我发现将 LINKPATH="-L/blah/" 作为环境变量传递给 scons 是有效的,而在传递 LDFLAGS="-L/blah/" 时却没有。

于 2016-06-06T08:42:03.930 回答
0

sudo scons --32 --libpath=/home/test/project/stage/lib/ --cpppath=/home/test/project/boost/ --prefix=/home/test/mongClient/output --dbg=on --opt=安装时

其中 libpath 用于从非标准位置链接库。cpppath 用于包含来自非标准位置的头文件。

于 2016-08-29T18:18:37.797 回答