Строка пакетного сценария выглядит обрезанной - PullRequest
0 голосов
/ 14 сентября 2018

Для моей системы сборки я экспортирую командный файл, чтобы заново сгенерировать график сборки, если какой-либо из сценариев сборки изменится. Пакетный сценарий не выполняется должным образом, команда, по-видимому, усечена или разделена на две части.

@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

Обратите внимание, что третий вызов - мусор.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Оказывается, это не имеет ничего общего с синтаксисом Batch, но тот факт, что команда, которая была запущена из пакетного файла, фактически переписывает содержимое самого пакетного файла.

Убедитесь, что файлне перезаписывается во время выполнения заставляет его работать.Я решил это путем «пинг-понга» между двумя именами файлов в разных сетях каждый раз, когда он вызывается (вызывающая сторона также знает, какой файл нужно вызывать).

0 голосов
/ 14 сентября 2018

Попробуйте без звонка.

@echo off
cd "C:\Users\niklas\Repositories\craftr-build\craftr4"
"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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...