我想开始使用scons.我有Python 3.0.1并下载了Scons 1.2.0; 当我尝试运行scons时,我收到以下错误.我在这里做错了吗?
C:\tmp\scons>c:\appl\python\3.0.1\Scripts\scons
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "c:\appl\python\3.0.1\Lib\site-packages\scons-1.2.0\SCons\__init__.py", l
ine 43, in <module>
import SCons.compat
File "c:\appl\python\3.0.1\Lib\site-packages\scons-1.2.0\SCons\compat\__init__
.py", line 208
raise Error, "Cannot move a directory '%s' into itself '%s'." % (src, dst)
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud) 从某些站点看来,Scons 支持 subversion checkout:
env = Environment()
env.SourceCode('.', env.Subversion('XXX'))
env.Program('hello.c')
Run Code Online (Sandbox Code Playgroud)
http://www.scons.org/doc/0.92/HTML/scons-user/x1625.html
但是从最新稳定版本(2.0.0)的手册页/用户指南中没有颠覆。更改日志中没有提到它。所以我想知道发生了什么。
在distcc中使用scons的正确方法是什么?使用CC =“ distcc g ++”或CXX的明显方法不起作用。
有没有人成功地将两者结合在一起?
谢谢!
我正在尝试使用 scons 将静态库 [1] 链接到另一个静态库 [2]。
不幸的是,发出的对“ar”的调用从不包含任何到库 [1] 的路径。
根据这篇文章如何将两个“ar”静态库合并为一个,应该可以将档案合并为一个。
在这里通常调用 CheckLibWithHeader 是不够的吗?
此致
这应该是非常简单的.
我在这里找到了手册页:http://www.scons.org/doc/HTML/scons-man.html
直接从它说:
--warn=all, --warn=no-all // Enables or disables all warnings.
Run Code Online (Sandbox Code Playgroud)
所以我键入:
scons --warn=no-all
Run Code Online (Sandbox Code Playgroud)
在建造时我仍然会收到一百万次警告.我必须搞砸一些可笑的简单=
在我的终端用完历史之前,我得到了几百个:
warning: deprecated conversion from string constant to 'char*'
Run Code Online (Sandbox Code Playgroud)
编辑:发现问题!! 这是一个C/C++项目,所以我需要的代码是:
env.Append(CCFLAGS=["-Wno-write-strings"])
Run Code Online (Sandbox Code Playgroud)
我有什么:
env.Append(CFLAGS=["-Wno-write-strings"])
Run Code Online (Sandbox Code Playgroud) 这是正确的,从胡椒18开始,我不需要scons构建系统来编译,而是使用gcc(nacl-versions)和makefile?
此外,生成的.nexe文件是否可以在任何平台上运行,而不仅仅是在编译的平台上,这是正确的吗?因此,例如,本机代码模块在mac os下开发和编译,并生成32位和64位nexe文件.网络服务器我将在linux上运行该模块,并仍然会执行32位和64位版本的模块?
是否可以更改对中间构建器的调用,例如通过传递目标前缀,以避免环境冲突?
例如,假设您要使用不同的编译器宏为两个不同的库使用源文件,如下所示:
env.Library('libraryA', 'source.c', CCFLAGS=['-DCONFIG_X'])
env.Library('libraryB', 'source.c', CCFLAGS=['-DCONFIG_Y'])
Run Code Online (Sandbox Code Playgroud)
SCons检测到冲突,因为Library-Builder调用Object-Builder来首先使用不同的CCFlags编译源文件.
显而易见的解决方案是从链接中拆分编译,如下所示:
objectA = env.Object('objectA', 'source.c', CCFLAGS=['-DCONFIG_X'])
objectB = env.Object('objectB', 'source.c', CCFLAGS=['-DCONFIG_y'])
env.Library('libraryA', objectA)
env.Library('libraryB', objectB)
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更优雅的方式,如果有多个文件用作源,这将特别有用.
谢谢!
Fortran中的构建模块需要按特定顺序完成,例如,如果文件A.f需要定义模块B.f,则B.f需要先编译.我怎样才能在Scons中施加这样的构建顺序?如果我提供源文件列表,它会按字母顺序排列(A.f以前编译B.f).我阅读了关于Requires()和Depends()功能,但无法让他们为我工作.
我很乐意只列出源文件,以便我需要编译它们(因此禁止按字母顺序重新排列它们),但任何其他方法也会受到欢迎.
按照Kyle的要求,这是我的Sconscript和构建日志:
# Main program building script
Import('env')
PROGRAM = 'main.exe'
SRC_PREFIX = './src/'
SRC = [ 'array_1D_module.f',
'array_2D_module.f',
'array_3D_module.f',
'thomas_algorithm_module.f',
'histogram_module.f',
'histogram_computer_module.f',
'density_parameters_module.f',
'diffusion3D_aos_z_sub_solver_module.f',
'diffusion3D_aos_y_sub_solver_module.f',
'diffusion3D_aos_x_sub_solver_module.f',
'diffusion3D_aos_solver_module.f',
'nonlinear_diffusion_utilities_module.f',
'nonlinear_diffusion_parameters_module.f',
'derivative_magnitude_computer_module.f',
'nonlinear_diffusion_module.f',
'main_module.f',
'main.f' ]
# Attach prefix to each source file
for i in range( len(SRC) ) :
SRC[i] = SRC_PREFIX + SRC[i]
env.Program(target = PROGRAM, source = SRC)
Run Code Online (Sandbox Code Playgroud)
这产生了:
scons: Reading …Run Code Online (Sandbox Code Playgroud) 我正试图在OSX Mavericks(10.9.3)上使用Xcode(5.1.1)为IOS构建AllJoyn.我已按照此处发布的所有步骤进行了操作,但仍然收到"Shell脚本调用错误",错误:不能执行'scons'(没有这样的文件或目录)在指令的最后一步,无法弄清楚如何为了解决这个问题,我已经安装了自制软件的scons,并尝试手动安装并安装它,但由于某种原因它无法找到它.任何帮助将非常感激.