0

次のようなディレクトリ (プロジェクト) 構造があります。

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ディレクトリに生成されます。

私はドキュメントを調べていましたが、ジェネレーターの場合、出力ディレクトリはデフォルトで meson ビルド ディレクトリであることをすでにどこかで見つけました。

この場合、生成されたファイルを特定のディレクトリに移動するにはどうすればよい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@'])

Meson の著者からのメモ:

current_build_dir() を使用しないでください。代わりに @OUTDIR@ を使用してください。一般に、ビルド ツリーまたはソース ツリー内を指すパスを手動で作成している場合は、おそらく何か問題があります。

@OUTDIR@ は動作することが保証されているためです。バックエンドが異なれば動作も異なり、ファイルを別の場所に配置することもあります。また、短く自己文書化されています。

于 2018-03-27T13:08:44.057 に答える