Я пытаюсь создать разделяемую библиотеку 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)