生成源的Meson custom_target输出目录

时间:2018-03-27 10:22:18

标签: c++ soap meson-build

我有一个像这样的目录(项目)结构:

main_project_dir (main meson.build file)
    project_A (meson.build)
    project_B (meson.build)

在目录project_A中,meson.build文件使用源文件生成器,如下所示:

gen_empty_soap_src = custom_target('empty_soap_src',
    input : 'empty.gsoap',
    output : ['soapC.cpp', 'soapH.h', 'soapStub.h', 'soap.nsmap'],
    depend_files : soap_gen_depend_files,
    command : [soap_compiler, '-n', '-I', '.', '@INPUT@'])

gen_base_soap_src = custom_target('base_soap_src',
    input : 'AbstractAgentAPI.gsoap',
    output : [
        ... a list of output files ...
    ],
    depend_files : soap_gen_depend_files,
    command : [soap_compiler, '-n', '-I', '.',
                '-I' + join_paths(meson.current_source_dir(), soap_src_dir, 'import'),
                '-I' + join_paths(meson.current_source_dir(), soap_src_dir),
                '@INPUT@'])

生成的文件假设在生成时位于project_A目录下。这意味着在构建期间应该保留目录结构,文件应该放在build/project_A目录下。但它们是在build目录中生成的。

我正在查看文档,我已经找到了生成器的某个地方默认情况下输出目录是介子构建目录。

在这种情况下,如何让生成的文件进入某个目录,build/project_A

1 个答案:

答案 0 :(得分:0)

看起来最佳做法是为生成的文件指定输出目录。在我的情况下,我使用-d参数。

要在Meson中将此dir指定为输出目录,应使用@OUTDIR@。 所以我的代码现在看起来像这样:

gen_empty_soap_src = custom_target('empty_soap_src',
    input : 'empty.gsoap',
    output : ['soapC.cpp', 'soapH.h', 'soapStub.h', 'soap.nsmap'],
    depend_files : soap_gen_depend_files,
    command : [soap_compiler, '-n', '-d', '@OUTDIR@', '-I', '.', '@INPUT@'])

gen_base_soap_src = custom_target('base_soap_src',
    input : 'AbstractAgentAPI.gsoap',
    output : [
        ... a list of output files ...
    ],
    depend_files : soap_gen_depend_files,
    command : [soap_compiler, '-n',
                '-d', '@OUTDIR@',
                '-I', '.',
                '-I' + join_paths(meson.current_source_dir(), soap_src_dir, 'import'),
                '-I' + join_paths(meson.current_source_dir(), soap_src_dir),
                '@INPUT@'])

Meson作者的一封信:

  

不要使用current_build_dir()。请改用@ OUTDIR @。一般来说,如果你   发现你手动构建指向构建内部的路径或   源树,你可能做错了。

     

因为@ OUTDIR @保证可以使用。不同的后端做事情   不同,可能会将文件放在不同的地方。也是   更短和自我记录。