首页 > 解决方案 > 介子相当于 automake 的 CONFIG_STATUS_DEPENDENCIES?

问题描述

我有一个项目,其构建选项非常复杂,以至于我必须在配置过程中运行多个外部脚本。如果这些脚本或它们读取的文件发生更改,则需要重新运行配置。

目前该项目使用 Autotools,我可以使用CONFIG_STATUS_DEPENDENCIES变量. 我正在尝试将构建过程移植到 Meson,但找不到等效的。目前是否有等效的,还是我需要提交功能请求?

具体来说,进行中的一个片段meson.build

pymod = import('python')
python = pymod.find_installation('python3')
svf_script = files('scripts/compute-symver-floor')
svf = run_command(python, svf_script, files('lib'),
                  host_machine.system())
if svf.returncode() == 0
  svf_results = svf.stdout().split('\n')
  SYMVER_FLOOR = svf_results[0].strip()
  SYMVER_FILE  = svf_results[2].strip()

else
  error(svf.stderr())
endif

# next line is a fake API expressing the thing I can't figure out how to do
meson.rerun_configuration_if_files_change(svf_script, SYMVER_FILE)

标签: meson-build

解决方案


这是custom_target()为了什么。

最小的例子

svf_script = files('svf_script.sh')
svf_depends = files('config_data_1', 'config_data_2') # files that svf_script.sh reads

svf = custom_target('svf_config', command: svf_script, depend_files: svf_depends, build_by_default: true, output: 'fake')

这将创建一个名为svf_config. 过期时,它会运行该svf_script命令。它取决于svf_depends文件对象中的文件,以及command关键字参数中列出的所有文件(即脚本本身)。

您还可以使用depends关键字参数将其他目标指定为依赖项。


output设置为'fake'阻止介子抱怨缺少输出关键字参数。确保在相应的构建目录中存在同名文件,以防止目标始终被视为过期。或者,如果您的配置脚本生成输出文件,您可以在此数组中列出它们。


推荐阅读