custom_target()提取并构建外部源

时间:2018-11-09 16:55:53

标签: ninja meson-build

我有一个Meson项目,该项目将分几个步骤:

  • 下载并解压缩tarball
  • console.log(cust)放入其中,cd-在上游存档目录中生成特定文件
  • 在存档目录中调整文件
  • 更多构建步骤

我的问题是如何设置输入/输出文件和依赖项。到目前为止,我有:

./configure

如果允许Meson避免(例如,如果文件已下载的话)重复下载,则需要采取单独步骤的原因。

如果尝试运行此命令,它将无法找到src_archive = 'extracted-dir' # this is what comes out of the upstream archive # wget and untar a tarball (produces the 'extracted-dir' dir in the build directory) dl_tgt = custom_target('download', command : [files('scripts/download.sh')], output : src_archive ) # cd to the directory, .configure # when this is complete, a file 'extracted-dir/docs/Doxyfile' will exist upstream_doxyfile = 'Doxyfile' # can't set a path on this file conf_tgt = custom_target('configure_src', input : dl_tgt, command : [files('scripts/configure.sh'), '@INPUT@'], output : doxy_out ) # Modify the upstream Doxyfile (copy it and append some settings to the copy) mod_doxyfile = 'Doxyfile.mod' mod_doxy_tgt = custom_target('configure_doxy', build_by_default : true, input : conf_tgt, command : [files('scripts/configure-doxy.sh'), '@INPUT@'], output : mod_doxyfile ) # ... and so on to run more steps as needed (in reality, some of these steps might be combined) (因为它们在子目录中)。

如果您使用路径指定它们,那就是一个错误:

Doxyfile

我也可以通过在脚本中手动指定路径来做到这一点,但是介子构建基本上只是一个过于复杂的shell脚本,没有任何依赖项管理。

如何像这样在构建目录中链接文件的依赖关系?

1 个答案:

答案 0 :(得分:0)

它恰好是介子的局限性,据报告为issue并仍处于打开状态。但是,对于您的Doxyfile修改自定义目标,替换应该起作用:

mod_doxy_tgt = custom_target('configure_doxy',
    input : doxy_out,
    ...
    output : '@BASENAME@.mod'
)

但是,一般来说,要解决该问题,请考虑在某个目录中创建另一个 meson.build 文件,在该目录中提取上游归档文件,并使用以下命令将其包括到主文件中:

subdir('extracted_docs_dir')

,以便Doxyfile与 meson.build 处于同一级别。因此,您可以直接在output :中使用文件名,这对于将特定任务与主要构建规则隔离也很有用。