SCons奇怪的执行顺序
SCons strange execution order
我的目标是在 SCons
中执行 boost::test
单元测试。在 SConstruct
文件中,我有以下代码:
for t in toTest:
nextTest = SConscript('#/test/' + t + '/SConscript',
variant_dir = test_dir + t,
duplicate = 0)
for a in nextTest:
import subprocess
subprocess.call(a.abspath)
Sconscript
分配给 nextTest
returns 一个程序:
prgs = env.Program( 'model_test_exe',
'ModelTest.cpp',
LIBPATH = [boost_lib, python_lib],
LIBS = [modellib])
Return('prgs')
此问题是在 scons -c
命令后发生的以下错误。下次我 运行 scons
它给了我:
C:\Users\...>scons -Q
WindowsError: [Error 2] The system cannot find the file specified:
File "C:\Users\...\Win32Project4\SConstruct", line 51:
subprocess.call(a.abspath)
看起来在 Sconscript
创建程序之前执行了调用。我能用这个做什么?我是 SCons 的新手,我已经用这个工具完成了捉迷藏。它确实在其他任何事情之前执行(没有创建 .obj/.lib 文件)。
此外,代码有效,因为当我将 subprocess
更改为 Alias
时,我可以将其编译为 .exe
。然而这不是我想要的。我的目标是在构建过程中打印测试结果。
O.k。您的问题是您正在使用子流程启动流程,而不是创建构建器或使用 Command()。
SCons 运行 分为几个阶段,第一个阶段是处理所有 SConstruct/SConscript 开始构建依赖关系图的逻辑。
在 SCons 运行s 扫描器并构建完整的依赖关系树之后,它会遍历该树并执行 运行s 命令。
因此,在 SCons 甚至可以开始构建任何东西之前,您的子流程得到 运行。
这是一个未经修饰的解释:
https://bitbucket.org/scons/scons/wiki/SconsProcessOverview
您可以尝试从您的 SConstruct 中删除 for nextTest 循环,而不是在您的 SConscripts 中放置类似这样的内容
prgs = env.Program( 'model_test_exe',
'ModelTest.cpp',
LIBPATH = [boost_lib, python_lib],
LIBS = [modellib])
env.Command('outputfile_for_test',prgs,'$SOURCE > $TARGET')
Return('prgs')
请注意,用户指南中涵盖了很多内容。
http://scons.org/doc/production/HTML/scons-user/index.html
我的目标是在 SCons
中执行 boost::test
单元测试。在 SConstruct
文件中,我有以下代码:
for t in toTest:
nextTest = SConscript('#/test/' + t + '/SConscript',
variant_dir = test_dir + t,
duplicate = 0)
for a in nextTest:
import subprocess
subprocess.call(a.abspath)
Sconscript
分配给 nextTest
returns 一个程序:
prgs = env.Program( 'model_test_exe',
'ModelTest.cpp',
LIBPATH = [boost_lib, python_lib],
LIBS = [modellib])
Return('prgs')
此问题是在 scons -c
命令后发生的以下错误。下次我 运行 scons
它给了我:
C:\Users\...>scons -Q
WindowsError: [Error 2] The system cannot find the file specified:
File "C:\Users\...\Win32Project4\SConstruct", line 51:
subprocess.call(a.abspath)
看起来在 Sconscript
创建程序之前执行了调用。我能用这个做什么?我是 SCons 的新手,我已经用这个工具完成了捉迷藏。它确实在其他任何事情之前执行(没有创建 .obj/.lib 文件)。
此外,代码有效,因为当我将 subprocess
更改为 Alias
时,我可以将其编译为 .exe
。然而这不是我想要的。我的目标是在构建过程中打印测试结果。
O.k。您的问题是您正在使用子流程启动流程,而不是创建构建器或使用 Command()。
SCons 运行 分为几个阶段,第一个阶段是处理所有 SConstruct/SConscript 开始构建依赖关系图的逻辑。
在 SCons 运行s 扫描器并构建完整的依赖关系树之后,它会遍历该树并执行 运行s 命令。
因此,在 SCons 甚至可以开始构建任何东西之前,您的子流程得到 运行。
这是一个未经修饰的解释: https://bitbucket.org/scons/scons/wiki/SconsProcessOverview
您可以尝试从您的 SConstruct 中删除 for nextTest 循环,而不是在您的 SConscripts 中放置类似这样的内容
prgs = env.Program( 'model_test_exe',
'ModelTest.cpp',
LIBPATH = [boost_lib, python_lib],
LIBS = [modellib])
env.Command('outputfile_for_test',prgs,'$SOURCE > $TARGET')
Return('prgs')
请注意,用户指南中涵盖了很多内容。 http://scons.org/doc/production/HTML/scons-user/index.html