Meson: добавить каталог include для цели, расположенной в папке сборки - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь создать разделяемую библиотеку C ++, используя систему сборки meson. У меня в основном 2 каталога $ROOT/src/ и $ROOT/tests/, в которые я помещаю все исходные / заголовочные и тестовые файлы, соответственно.

Минимальный сценарий сборки для этого может быть (игнорируя файлы meson.build в подкаталогах , которые по сути просто заполняют списки sourceFiles и testFiles )

project(
  'soLibProject',
  'cpp'
)

# get source files in src/ sub-directory
sourceFiles = []
subdir('src/')

# get test files in tests/ sub-directory
testFiles = []
subdir('tests/')

# build shared library
so_lib = shared_library(
  'soLib',
  sourceFiles
)

# build test executable
tests = executable(
  'tests',
  testFiles,
  link_with: so_lib
)

Создание общей библиотеки работает нормально, и я могу заставить тест работать, формируя относительные пути к файлам заголовков внутри каталога $ROOT/src/. Однако в настоящее время я пытаюсь создать папку, содержащую все файлы заголовков из каталога $ROOT/src/**, и другой автоматически сгенерированный файл заголовка, который включает эти файлы заголовков. Эта часть проста, однако я решил поместить этот каталог заголовков (по сути, каталог include/, поскольку он будет позже использоваться для библиотеки) внутри сборки root, т.е. если я запускаю meson build/debug, то я делаю что-то вроде cp $ROOT/src/**/*.hpp $ROOT/build/debug/include/. Если я хочу использовать эти файлы заголовков вместо своих тестов, я должен включить этот каталог в цель executable, используя include_directories: , однако я не могу использовать meson.build_root() + 'include/', поскольку это абсолютный путь (и мы можем использовать только относительный путь для мезона). Я должен упомянуть здесь, что каталог сборки не обязательно должен быть build/debug, и существуют определенные пользователем цели, поэтому я не могу заранее знать все возможные каталоги сборки.

Так что я предполагаю, что мой вопрос будет либо как чтобы получить относительный путь к каталогу сборки (в идеале в мезонным способом , т.е. я знаю, что могу запускать внешние команды или python скрипты, чтобы делать некоторые маги c, мне просто интересно, есть ли является более чистым решением, чем то, что доступно) или как я могу проинструктировать meson искать папку с именем include/ в каталоге сборки (я знаю, что каталог сборки автоматически включается в путь поиска meson)

...