Выходной каталог 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 в этом случае?

0

Решение

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]