Мезонные зависимости catch22 и ленивый доступ к выходным данным - PullRequest
0 голосов
/ 10 октября 2019

Мы хотели бы представить Meson для создания нашего существующего приложения на C ++. Наша структура выглядит следующим образом:

  • У нас есть 8 основных модулей (mod_X)
  • Каждый модуль имеет 20-40 подкаталогов, каждый с 5 - 100 файлами cpp;разделены в библиотеках и исполняемых файлах.
  • mod_INFRA/apps/myparser имеет цель, которая создает исполняемый файл генератора кода
    • , который зависит только от mod_INFRA/libs/A
  • генератор кода должен применяться к определенным файлам (* .rules) в многочисленных подкаталогах в всех модулях и подкаталогах, включая сам mod_INFRA.
  • Сгенерированный исходный код должен быть скомпилирован и рассмотрен с цельюв subdir_X

Чего я хотел бы достичь:

  • В root/meson.build определить общее и повторно используемое custom_targetили generator, которые я могу вызывать / применять в каждом модуле и подкаталоге по мере необходимости.

Проблема:

  • В root/meson.build мыопределить общие переменные, такие как флаги компилятора и т. д., и мы делаем subdir(‘mod_INFRA’) для каждого модуля. В mod_INFRA/meson.build я делаю subdir(‘apps/xyz’), subdir(‘libs/abc’), и т. Д. для каждого subdir. Все в порядке
  • Однако я изо всех сил пытаюсь определить custom_target or generator в root/meson.build. Требуемый исполняемый файл еще не доступен до subdir('mod_INFRA'). А после subdir(..) уже слишком поздно, так как мне нужен генератор, чтобы уже создавать файлы в других подкаталогах в mod_INFRA.

Возможным решением может быть «прокси», который лениво разрешает исполняемый файл по имени цели. Например, если бы я мог сделать (псевдокод): generator(getTargetOutput(‘myparser’), …). Но я не мог выяснить, доступно ли это.

Любые другие мысли о том, как решить эту проблему, без полной перестройки структуры каталогов?

- meson.build
- mod_INFRA
  - meson.build
  - apps
    - meson.build
    - myparser
      - meson.build
  - libs
    - subdir_INFRA_A   (required to build myparser)
      - meson.build
    - subdir_INFRA_B
      - meson.build
    - subdir_INFRA_C    (requires parser to generate code)
      - meson.build
- mod_A
  - meson.build
  - subdir_A_A      (requires parser to generate code)
    - meson.build
  - subdir_A_B      (requires parser to generate code)
    - meson.build
- mod_B
...

1 Ответ

0 голосов
/ 11 октября 2019

Кто-то предложил: На верхнем уровне вы можете создать подкаталог прямо в каталогах "mod_INFRA / libs / subdir_INFRA_A" и "apps / myparser", чтобы построить их, прежде чем вернуться на верхний уровень, а затем повторно подкатить вниз на один уровень. ? Это добилось цели,

...