У меня есть несколько сложный скрипт сборки 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 для ее базового пути?
Обновление: случай воспроизведения, поместите https://pastebin.com/W08yZuF9 как SConstruct
в корневой каталог, создайте подкаталог somelib
и поместите https://pastebin.com/eiP63Yxh как SConstruct
в нем, также создайте main.cpp
со знаком " Hello World "или другая фиктивная программа.