Может ли кто-нибудь помочь мне понять следующее: Я пишу библиотеку "foo" только для заголовков со следующей структурой:
Project_Root
meson.build
include/foo.hpp
foo/meson.build
foo/bar.hpp
Вот подробности:
[файл: meson.build]
project('foobar', 'cpp',
version: '0.1.0',
default_options: ['cpp_std=c++20']
)
project_headers = []
subdir('include')
install_headers(project_headers, preserve_path: true)
[файл: include/meson.build]
project_headers += files('foo.hpp')
subdir('foo')
[файл: include/foo/meson.build]
project_headers += files('bar.hpp')
Мой вопрос: почему во время установки и foo.hpp, и bar.hpp устанавливаются в один и тот же каталог, хотя структура подкаталогов должна оставаться сохраненной с помощью preserve_path: true
?
При использовании preserve_path
meson извлекает каталог из имени файла. Вот код от install_headers()
:
...
if kwargs['preserve_path']:
for file in source_files:
dirname = os.path.dirname(file.fname)
dirs[dirname].append(file)
else:
dirs[''].extend(source_files)
...
В вашем случае fname
для bar.hpp
будет bar.hpp
, поэтому пути не будет. Подкаталог хранится files()
, но хранится в другом атрибуте. Я не могу комментировать, почему это реализовано таким образом. Я не разработчик Meson.
Пример в примечаниях к выпуску Meson показывает путь, включенный в имена файлов:
https://mesonbuild.com/Release-notes-for-0-63-0.html#added-preserve_path-arg-to-install_headers