标签: scons

在scons中检测CPU架构(32位/ 64位)?

是否有用于检测scons中 CPU架构的"标准"插件?

顺便说一下,这个问题已经在这里以更一般的形式提出了......只是想知道是否有人已经花时间将这些信息纳入scons.

build-process cpu-architecture scons

4
推荐指数
1
解决办法
3391
查看次数

SCons:使用分层构建单独调试/发布构建目录

我刚开始学习使用SCons,期待它解决了我的一些问题.我正在创建一个源层次结构来理解SCons的基础知识.

让我们从这个文件夹结构开始:

  • test/foo:包含main.cpp,main.h
  • test/bar:包含自己的main.cpp,main.h
  • test/common:包含foo和bar使用的utils.cpp和utils.h
  • test/external/moo:一些外部库的源代码,包含'configure',它产生'Makefile'(不使用SCons),所以SCons需要在'configure'之后调用'make'; 我怀疑使用构建目录时这部分可能会很棘手
  • test/build/debug:为调试构建dir
  • test/build/release:build dir for release

这是我想做的事情:

  • 有两种类型的构建:debug/release,唯一的区别是debug指定-DDEBUG到g ++

  • 使用构建目录,以便在源树中不创建.o文件.让我们称这些构建目录为"构建/调试"和"构建/发布"

  • 能够调用./configure并在另一个不使用SCons的项目上生成,然后链接它生成的libmoo.a和我的项目

  • 构建是否完全平行(scons -j9为8核?)

  • 有一些与调试/发布无关的方法来指定要链接的库.就像是:

    env.Program(target='foo', source=['foo/main.cpp', '#build/(DEBUG_OR_RELEASE)/lib/libsomething.a'])
    
    Run Code Online (Sandbox Code Playgroud)

上面的基本SConstruct/SConscript文件会是什么样的?即使只是正确方向的指针也会很棒!

提前致谢 :-)

scons

4
推荐指数
1
解决办法
4363
查看次数

如何在'scons'中为命令生成器指定COMSTR

scons中的许多内置构建器都有$*COMSTR变量,用于更改其关联的构建器的默认输出.我们可以使用$*COMSTR变量来选择性地使我们的构建过程更加清晰.

我想为命令构建器设置$*COMSTR变量.

target = 'mydb.db3'

populatesql = 'populate.sql'
sources = [populatesql]

command = '@sqlite3 $TARGET < ' + populatesql

built_database = env.Command(target, sources, command)
Run Code Online (Sandbox Code Playgroud)

我发现我可以在命令前加上'@'字符来抑制输出,但我一直无法发现如何在命令构建器中使用$*COMSTR.我在这里错过了一招吗?

谢谢.

python scons

4
推荐指数
1
解决办法
1481
查看次数

如何清除scons缓存?CheckLibWithHeader第一次返回"no",第二次返回"yes"

我有一个SConstruct文件正在检查Google protobuf库,如下所示:

main['HAVE_PROTOBUF'] = main['PROTOC'] and \
conf.CheckLibWithHeader('protobuf', 'google/protobuf/message.h',
                        'C++', 'GOOGLE_PROTOBUF_VERIFY_VERSION;')
Run Code Online (Sandbox Code Playgroud)

我注意到对CheckLibWithHeader的这个调用返回"否".我正在对脚本进行一些调试,对我来说很明显后来对CheckLibWithHeader的相同调用返回"是".当我在SConstruct文件中紧跟上面一行后放置一条相同的行时,输出如下:

.
.
.
Checking for accept(0,0,0) in C++ library None... (cached) yes
Checking for zlibVersion() in C++ library z... (cached) yes
Checking for GOOGLE_PROTOBUF_VERIFY_VERSION in C++ library protobuf... (cached) no
Checking for GOOGLE_PROTOBUF_VERIFY_VERSION in C++ library protobuf... (cached) yes
Checking for clock_nanosleep(0,0,NULL,NULL) in C library None... no
Checking for clock_nanosleep(0,0,NULL,NULL) in C library rt... yes
.
.
.
Run Code Online (Sandbox Code Playgroud)

我有protobuf库.有谁知道为什么第一次调用CheckLibWithHeader返回"否"?

对我来说这个问题发生在CentOS中,但不是在Ubuntu中.

更新:我不再能够重现上述问题.但是,我发现当我遇到scons使用标记为"(缓存)"的值的问题时,我觉得这可能是不正确的,我可以做两件事来帮助找到解决方案.我将把这些放在下面的答案中.

scons

4
推荐指数
1
解决办法
4316
查看次数

如何配置visual studio代码来编译scons?

我在 ubuntu 上安装了 vsc、python、scons。我还为 python 和相关工具安装了语法插件。我正在编辑 SConstruct 文件,我希望当我按“F5”时,它会调出 scons 来执行我的项目文件。

如何配置?

integration config compilation scons visual-studio-code

4
推荐指数
1
解决办法
5313
查看次数

SCons - 非标准位置的标题/库

我正在尝试使用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...
Run Code Online (Sandbox Code Playgroud)

结果总是一样的:

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++");  
Run Code Online (Sandbox Code Playgroud)

我无法在Google上找到答案.

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

scons building

3
推荐指数
1
解决办法
6310
查看次数

Visual Studio命令编译器强制64位编译

我试图在Windows VS命令提示符中构建可执行文件和一些相关的dll.该项目附带一个scons文件,所以我只需在VS Cmd提示符中输入scons即可.

可执行文件正在"x86"VS Cmd提示符中构建.但是,运行时,可执行文件不是32位(使用任务管理器确认.)我的同事使用scons文件在他的64位计算机上构建相同的项目,并且他的可执行文件在我的计算机上是32位.(再次与任务经理确认)

dll是由32位JVM加载的,因为它们是64位,所以它们会抛出一个错误.我的同事dll不会.

我们无法弄清楚为什么我的计算机在"x86"VS环境中强制进行64位构建.有没有人有什么建议?

PS - 我有MS VS 2010,他有MS VS 2010 Express.

PSS - 我有64位python,因此我的scons也是64位.然而,我的同事也是如此.

c++ windows scons 32bit-64bit visual-studio

3
推荐指数
1
解决办法
2700
查看次数

我们是否需要每个源目录中的sconscript文件

我正在使用scons来编译我的项目.在我的项目中,源文件位于不同的目录中.我们是否需要在每个目录中使用sconscript文件来编译这些项目源文件?

我试图使用单个sconscript文件编译所有目录.但是所有目标文件都只添加到我的源目录中.

我正在使用这个功能:

env.Library('libs',files_list)
Run Code Online (Sandbox Code Playgroud)

如果files_list包含唯一的文件名,则Obj文件正在生成@variable目录.

如果files_list包含文件路径名,则Obj文件正在生成@ source目录.

你能告诉我怎么做吗?

python scons

3
推荐指数
1
解决办法
5226
查看次数

如何让scons将目录本身视为目标?

我正在尝试建立一个涉及外部工具的构建,它生成一个目录作为输出(doxyindexer对于好奇的).到目前为止,我基本上得到了这些命令:

target = "doxysearch.db/iamchert"
doxygen.Doxyindexer(target,["project1.xml","project2.xml","project3.xml"])
Default([target])
Default(Install(ARGUMENTS["cgibin"],"doxysearch.db"))
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我认为我想target成为目录本身,而不是目录中的一些随机文件.我没有什么可以全球化的,因为在我构建它之前目标不存在而且我不想假设任何Dimitri可能会改变!当我使用目录作为目标时,我收到此错误:

TypeError: Tried to lookup Dir 'doxysearch.db' as a File.:
Run Code Online (Sandbox Code Playgroud)

这就是我选择iamchert成为目标的原因.这些线条似乎都按预期工作,即使我的方法是黑客.但是,我无法让最后一行工作.我需要将目录复制doxysearch.dbcgi-bin目录中,该目录由用户在命令行中指定.也许有人可以解释如何正确地完成这一步骤?对于scons来说,我是个新人!

我在搜索答案时遇到了麻烦,因为所涉及的所有搜索词都太常见了,无法找到我特别的帮助!

doxygen scons

3
推荐指数
1
解决办法
1771
查看次数

无法运行scons获取导入错误

我已经安装了scons 2.3.2并且有python 2.4.

当我运行scons时,我看到以下错误:

scons
Import failed. Unable to find SCons files in:
  /usr/bin/../engine
  /usr/bin/scons-local-2.3.2
  /usr/bin/scons-local
  /usr/lib/scons-2.3.2
  /usr/lib/scons-2.3.2
  /usr/local/lib/scons-2.3.2
  /usr/lib/python2.4/site-packages/scons-2.3.2
  /usr/lib/python2.4/site-packages/scons-2.3.2
  /usr/local/lib/python2.4/site-packages/scons-2.3.2
  /usr/lib64/scons-2.3.2
  /usr/lib/scons
  /usr/lib/scons
  /usr/local/lib/scons
  /usr/lib/python2.4/site-packages/scons
  /usr/lib/python2.4/site-packages/scons
  /usr/local/lib/python2.4/site-packages/scons
  /usr/lib64/scons
Traceback (most recent call last):
  File "/usr/bin/scons", line 190, in ?
    import SCons.Script
  File "/usr/lib/scons/SCons/Script/__init__.py", line 76, in ?
    import SCons.Environment
  File "/usr/lib/scons/SCons/Environment.py", line 48, in ?
    import SCons.Defaults
  File "/usr/lib/scons/SCons/Defaults.py", line 52, in ?
    import SCons.Tool
  File "/usr/lib/scons/SCons/Tool/__init__.py", line 50, in ?
    import SCons.Scanner.C
  File "/usr/lib/scons/SCons/Scanner/C.py", line 36, in …
Run Code Online (Sandbox Code Playgroud)

python scons

3
推荐指数
1
解决办法
1756
查看次数