Path 如何在SConscript中运行刚编译的程序

Path 如何在SConscript中运行刚编译的程序,path,scons,build-system,Path,Scons,Build System,我有一个有点复杂的SCons构建脚本,某个点执行以下两个步骤: # 1: builds unit tests (googletest, shell executable) compile_tests = some_environment.Program(executable_path, test_sources) # 2: runs unit tests (call earlier compiled program) run_tests = other_environment.Command(

我有一个有点复杂的SCons构建脚本,某个点执行以下两个步骤:

# 1: builds unit tests (googletest, shell executable)
compile_tests = some_environment.Program(executable_path, test_sources)

# 2: runs unit tests (call earlier compiled program)
run_tests = other_environment.Command(
    source = executable_path,
    action = executable_path + ' --gtest_output=xml:' + test_results_path,
    target = test_results_path
)

Depends(run_tests, compile_tests)
如果我自己用这个构建脚本运行scons,这就可以了

但是,如果我通过
environment.SConscript()
从另一个
SConstruct
文件一级目录调用它,那么步骤
1
会调整到项目位置的路径,而步骤
2
则不会。请参阅此输出:

scons: Building targets ...
g++ -o Nuclex.Game.Native/obj/gcc-7-amd64-release/NuclexGameNativeTests -z defs -Bsymbolic Nuclex.Game.Native/obj/gcc-7-amd64-release/Tests/Timing/ClockTests.o -LNuclex.Game.Native/obj/gcc-7-amd64-release -LReferences/googletest/gcc-7-amd64-release -lNuclexGameNativeStatic -lgoogletest -lgoogletest_main -lpthread
obj/gcc-7-amd64-release/NuclexGameNativeTests --gtest_output=xml:bin/gcc-7-amd64-release/gtest-results.xml
sh: obj/gcc-7-amd64-release/NuclexGameNativeTests: No such file or directory
第2行将可执行文件构建到
Nuclex.Game.Native/obj/gcc-7-amd64-release/
中,而第3行尝试在
obj/gcc-7-amd64-release/
中调用它,忘记了项目目录

我应该使用另一种方式来调用我的单元测试可执行文件吗?或者我可以查询SCons环境的基本路径吗


更新:复制案例,作为
SConstruct
放置在根目录中,创建子目录
somelib
并作为
SConstruct
放置在其中,还使用“Hello World”或其他虚拟程序创建
main.cpp

SCons操作(命令中的
操作
参数)将使用SCons变量正确替换中的源和目标,并自动考虑VariantDirs和SConscript目录。您可以在此处找到有关这些源和目标替换的更多信息:

有一节解释了在SConscript和VariantDirs中使用此选项:

SConscript('src/SConscript',variant_dir='sub/dir')
$SOURCE=>sub/dir/file.x
${SOURCE.srcpath}=>src/file.x
${SOURCE.srcdir}=>src

因此,在您的示例中,我认为您希望将操作字符串中的
可执行路径
替换为
$SOURCE

# 2: runs unit tests (call earlier compiled program)
run_tests = other_environment.Command(
    source = executable_path,
    action = '$SOURCE --gtest_output=xml:$TARGET',
    target = test_results_path
)

我不会把你们目前拥有的东西称为一个最小的、完整的、可验证的例子。是否以任何方式修改了这些环境(某些环境、其他环境)?Executive_path和test_results_path的值是多少?调用SConscript是否有任何参数?我相信这个示例足以理解和再现这个问题。假设环境是普通的,如果愿意,可以用
可执行路径
测试结果路径
替换
a
b
。我现在还添加了两个最小的
SConstruct
文件,以重现问题底部的问题。我尝试了您的复制案例,似乎一切正常。你确定你没有在任何地方使用变体目录吗?您的路径
obj/gcc-7-amd64-release/
表明您是?环境之间没有差异,那么为什么不使用相同的环境呢?我的实际构建设置使用VariantDir,但问题取决于
environment.SConscript()
调用。在我的系统上,最小复制案例错误为
sh:。/示例:没有这样的文件或目录