Несколько целей с разными файлами конфигурации в одном meson.build? - PullRequest
1 голос
/ 03 августа 2020
Приложение

My C может быть создано с различными режимами , которые ведут себя по-разному в зависимости от содержимого config.h. В моем файле meson.build я генерирую этот заголовок с помощью функции configure_file().

Теперь я хотел бы улучшить свою систему сборки для компиляции двоичных файлов для нескольких режимов в одной сборке . Это означает, что мне придется управлять разными версиями config.h бок о бок.

Я планировал создать разные версии config.h и сохранить их в разных папках. Затем настройте каталоги включения для каждой цели Meson, чтобы выбрать заголовок для режима , который я создаю.

К сожалению, я обнаружил, что вы не можете указать подпапку в параметре output configure_file(). Файл всегда будет создаваться в том же месте, что и meson.build, выполняемый в данный момент.

Это означает, что мне всегда нужно включать '.' и я не могу различать различные режимы . Примечание: изменение директив #include в исходных файлах C не является вариантом.

Есть ли способ обойти это в Meson?

1 Ответ

1 голос
/ 09 августа 2020

Позвольте meson обрабатывать параметры конфигурации изначально вместо того, чтобы обойти это путем анализа параметров через config.h.

В файле meson_options.txt вы объявляете настраиваемые параметры конфигурации, такие как:

option('mode', type : 'combo', choices : ['one', 'two'], value : 'one')

Затем, когда вы настраиваете свою сборку, вы можете создавать отдельные каталоги сборки, вызывая:

meson buildOne -Dmode=one
ninja -C buildOne

и

meson buildTwo -Dmode=two
ninja -C buildTwo

Однако описанный выше подход может быть нежелательным?

Другой возможный метод - объявить несколько subproject(). Если ваш текущий meson.build не слишком конкретен c, вы можете попробовать следующее.

Имейте новый основной meson.build, который занимается упаковкой, но также копирует шаблон meson.build в подгруппе каталог подпроекта, по одному для каждого режима. Для этого может потребоваться всего несколько дополнительных ../../, чтобы компенсировать различную структуру сборки.

Хорошая вещь с объявлением подпроекта заключается в том, что вы можете переопределить параметры сборки для этого подпроекта. Фактически это означало бы, что у вас снова есть отдельные каталоги сборки, но только один основной каталог сборки, и вам нужно вызвать meson только один раз. части различного режима в специальных подпроектах / библиотеках.

...