如何从Meson脚本中运行shell命令?

3

如何从Meson构建脚本运行shell命令(例如cp,即复制)?

我尝试使用以下代码:

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

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

但是它什么也没做。
run_command 运行成功(返回0),但没有文件被复制。
如果我用 cp3 替换 cp,我会收到来自 Meson 的错误消息,进程终止,并且甚至无法执行后续的命令。
如果我用 test0.txt 替换 test.txt,我会从脚本中收到错误消息。

所以脚本的行为是正确的,但该命令在文件系统上没有留下任何痕迹。

run_command 是从 Meson 运行 shell 命令的唯一方法吗?我做错了什么?


参考: https://mesonbuild.com/External-commands.html

2个回答

5
该命令是从未指定目录运行的,因此,请尝试指定完整的文件名,例如:
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)

它可以工作。注意:join_paths 似乎不像附加一样工作。例如:join_path('/path/to/', 'subdir/test.txt') --> /path/to/subdir/test.txt,而 join_path('/path/to/', '/subdir/test.txt') --> /subdir/test.txt - Pietro
3
@Pietro 正是,这就是为什么参考手册上说对于join_paths:“如果任何一个单独的路径段是绝对路径,则其之前的所有路径段都将被舍弃。” - pmod

1

最近我看到了这个答案。

首先,在最近的Meson版本中,source_rootbuild_root已经被弃用。请使用current_source_dircurrent_build_dir函数代替。

其次,run_command即使在clean操作中也会被执行,如果可能的话,最好使用custom_target来达到相同的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接