0

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

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

在目录project_Ameson.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

4

1 回答 1

1

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

要将此目录指定为 Meson 中的输出目录,@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@'])

介子作者的注释:

不要使用 current_build_dir()。请改用@OUTDIR@。一般来说,如果您发现您正在手动构建指向构建或源代码树内的路径,那么您可能做错了什么。

因为@OUTDIR@ 保证可以工作。不同的后端做事不同,并且可能将文件放在不同的地方。它也更短和自我记录。

于 2018-03-27T13:08:44.057 回答