Выходной каталог Meson custom_target для сгенерированных источников
У меня есть структура каталогов (проекта), как это:
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
в этом случае?
1 ответ
Похоже, что лучше всего указывать выходной каталог для сгенерированных файлов. В моем случае я использую -d
параметр.
Чтобы указать этот каталог в качестве выходного каталога в Мезон, @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@ гарантированно работает. Разные бэкэнды работают по-разному и могут размещать файлы в разных местах. Он также короче и самодокументируется.