Для моей системы сборки я экспортирую командный файл, чтобы заново сгенерировать график сборки, если какой-либо из сценариев сборки изменится. Пакетный сценарий не выполняется должным образом, команда, по-видимому, усечена или разделена на две части.
@cd C:\Users\niklas\Repositories\craftr-build\craftr4
@call c:\users\niklas\repositories\craftr-build\craftr4\.venv\scripts\python.exe -m craftr.main -c --project C:\Users\niklas\Repositories\craftr-build\craftr4\examples\c\build.craftr --variant debug -Oninja:_internal_regen=true -Oninja:_internal_regen=true -Oninja:_internal_regen=true -Oninja:speed=true --project examples/c\build.craftr --build-root build --pywarn none
@if %errorlevel% neq 0 exit %errorlevel%
Это дает мне
[.. output of command, WITH the flags below ..]
C:\Users\niklas\Repositories\craftr-build\craftr4>ld-root build --pywarn none
'ld-root' is not recognized as an internal or external command,
operable program or batch file.
Параметры --build-root build --pywarn none
фактически передаются команде, но по какой-то причине пакетный процессор пытается запустить ld-root build --pywarn none
также в качестве команды. Почему это так?
Обновление: похоже, проблема с двойными двоеточиями в флагах -O...
. Замена этих двойных двоеточий другим символом делает его «рабочим» (очевидно, команда тогда неверна, но Batch выполняет ее как положено).
Добавление двойных кавычек вокруг аргументов не помогает.
Обновление: пакет является загадкой - теперь он работает по какой-то причине, так как я убедился, что флаг -Oninja:_internal_regen=true
не добавляется несколько раз, и удалил первый аргумент --project ...
(который также был добавлен неверно в любом случае).
Обновление: во время экспериментов я обнаружил еще одно странное поведение. Следующее работает нормально:
cd C:\Users\niklas\Repositories\craftr-build\craftr4
call c:\users\niklas\repositories\craftr-build\craftr4\.venv\scripts\python.exe -m craftr.main -c --variant debug -Oninja:speed=true -Oninja:_internal_regen=true --project examples/c\build.craftr
if %errorlevel% neq 0 exit %errorlevel%
и т
C:\Users\niklas\Repositories\craftr-build\craftr4>cd C:\Users\niklas\Repositories\craftr-build\craftr4
C:\Users\niklas\Repositories\craftr-build\craftr4>call c:\users\niklas\repositories\craftr-build\craftr4\.venv\scripts\python.exe -m craftr.main -c --variant debug -Oninja:speed=true -Oninja:_internal_regen=false --project examples/c\build.craftr
Microsoft Visual C++ v141 (msvc) 19.14.26433 for x64
note: writing "C:\Users\niklas\Repositories\craftr-build\craftr4\build\debug\build.ninja"
C:\Users\niklas\Repositories\craftr-build\craftr4>\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.backend\ninja\build.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\aliases\craftr.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.backend\ninja\ninja_syntax.py C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.backend\ninja\build_server.py C:\Users\niklas\Repositories\craftr-build\craftr4\examples\c\build.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\aliases\cxx.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.lang\cxx\build.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.lang\cxx\impl\base.py C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.lang\cxx\impl\msvc.py C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.compiler\msvc.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.tool\batchvars.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.tool\cache.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.compiler\llvm.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.compiler\mingw.craftr OUTPUTS: C:\Users\niklas\Repositories\craftr-build\craftr4\build\debug\build.ninja COMMAND: c:\users\niklas\repositories\craftr-build\craftr4\.venv\scripts\python.exe -m craftr.main -c --variant debug -Oninja:speed=true -Oninja:_internal_regen=false --project examples/c\build.craftr
C:\Users\niklas\Repositories\craftr-build\craftr4>if 0 NEQ 0 exit 0
Но измените -Oninja:_internal_regen=true
на -Oninja:_internal_regen=false
, и оно распадется.
C:\Users\niklas\Repositories\craftr-build\craftr4>cd C:\Users\niklas\Repositories\craftr-build\craftr4
C:\Users\niklas\Repositories\craftr-build\craftr4>call c:\users\niklas\repositories\craftr-build\craftr4\.venv\scripts\python.exe -m craftr.main -c --variant debug -Oninja:speed=true -Oninja:_internal_regen=false --project examples/c\build.craftr
Microsoft Visual C++ v141 (msvc) 19.14.26433 for x64
note: writing "C:\Users\niklas\Repositories\craftr-build\craftr4\build\debug\build.ninja"
C:\Users\niklas\Repositories\craftr-build\craftr4>\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.backend\ninja\build.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\aliases\craftr.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.backend\ninja\ninja_syntax.py C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.backend\ninja\build_server.py C:\Users\niklas\Repositories\craftr-build\craftr4\examples\c\build.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\aliases\cxx.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.lang\cxx\build.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.lang\cxx\impl\base.py C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.lang\cxx\impl\msvc.py C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.compiler\msvc.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.tool\batchvars.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.tool\cache.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.compiler\llvm.craftr C:\Users\niklas\Repositories\craftr-build\craftr4\src\craftr\stdlib\net.craftr.compiler\mingw.craftr OUTPUTS: C:\Users\niklas\Repositories\craftr-build\craftr4\build\debug\build.ninja COMMAND: c:\users\niklas\repositories\craftr-build\craftr4\.venv\scripts\python.exe -m craftr.main -c --variant debug -Oninja:speed=true -Oninja:_internal_regen=false --project examples/c\build.craftr
C:\Users\niklas\Repositories\craftr-build\craftr4>if 0 NEQ 0 exit 0
Обратите внимание, что третий вызов - мусор.