Как запустить команду оболочки из сценария Meson?

Как я могу запустить команду оболочки (например, cp, т.е. скопировать) из сценария сборки Meson?

Я пробовал с этим кодом:

r = run_command('cp', 'test.txt', 'test2.txt')

if r.returncode() != 0
  warning('Command failed')
endif

Но он ничего не делает.
run_command выполняется успешно (возвращается 0), но файл не копируется.
Если я заменяю cp на cp3, я получаю сообщение об ошибке от Meson, процесс завершается, и он даже не получает в следующую строку.
Если я заменю test.txt на test0.txt, я получаю сообщение об ошибке из сценария.

Таким образом, сценарий работает правильно, но команда не оставляет следов в файловой системе.

run_command - единственный способ запустить команду оболочки из Meson? Что я делаю неправильно?


Ссылка: https://mesonbuild.com/External-commands.html


person Pietro    schedule 02.10.2018    source источник


Ответы (1)


Команда запускается из каталога unspecified, поэтому попробуйте указать полные имена файлов, например:

source = join_paths(meson.source_root(), 'test.txt')
dest = join_paths(meson.build_root(), 'test2.txt')
message('copying @0@ to @1@ ...'.format(source, dest))
r = run_command('cp', source, dest)
person pmod    schedule 03.10.2018
comment
Оно работает. Примечание: join_paths, похоже, не работает как дополнение. Например: join_path('/path/to/', 'subdir/test.txt') --> /path/to/subdir/test.txt, а join_path('/path/to/', '/subdir/test.txt') --> /subdir/test.txt - person Pietro; 04.10.2018
comment
Именно @Pietro, поэтому в справочном руководстве для join_paths указано: если какой-либо из отдельных сегментов является абсолютным путем, все сегменты до него отбрасываются. - person pmod; 04.10.2018