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