是否有用于检测scons中 CPU架构的"标准"插件?
顺便说一下,这个问题已经在这里以更一般的形式提出了......只是想知道是否有人已经花时间将这些信息纳入scons.
我刚开始学习使用SCons,期待它解决了我的一些问题.我正在创建一个源层次结构来理解SCons的基础知识.
让我们从这个文件夹结构开始:
这是我想做的事情:
有两种类型的构建: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中的许多内置构建器都有$*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.我在这里错过了一招吗?
谢谢.
我有一个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使用标记为"(缓存)"的值的问题时,我觉得这可能是不正确的,我可以做两件事来帮助找到解决方案.我将把这些放在下面的答案中.
我在 ubuntu 上安装了 vsc、python、scons。我还为 python 和相关工具安装了语法插件。我正在编辑 SConstruct 文件,我希望当我按“F5”时,它会调出 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才能让它工作?
我试图在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位.然而,我的同事也是如此.
我正在使用scons来编译我的项目.在我的项目中,源文件位于不同的目录中.我们是否需要在每个目录中使用sconscript文件来编译这些项目源文件?
我试图使用单个sconscript文件编译所有目录.但是所有目标文件都只添加到我的源目录中.
我正在使用这个功能:
env.Library('libs',files_list)
Run Code Online (Sandbox Code Playgroud)
如果files_list包含唯一的文件名,则Obj文件正在生成@variable目录.
如果files_list包含文件路径名,则Obj文件正在生成@ source目录.
你能告诉我怎么做吗?
我正在尝试建立一个涉及外部工具的构建,它生成一个目录作为输出(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.db到cgi-bin目录中,该目录由用户在命令行中指定.也许有人可以解释如何正确地完成这一步骤?对于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) scons ×10
python ×3
32bit-64bit ×1
building ×1
c++ ×1
compilation ×1
config ×1
doxygen ×1
integration ×1
windows ×1