有谁能帮我理解一下吗?我正在编写一个头文件库'foo',结构如下:
p>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)
[文件:包括/meson.build]
project_headers += files('foo.hpp')
subdir('foo')
[文件:包括/foo/meson.build]
project_headers += files('bar.hpp')
我的问题是为什么在安装过程中,foo.hpp和bar.hpp都安装在同一个目录中,即使使用preserve_path: true
应该保留子目录结构?
使用preserve_path
时,介子从文件名中提取目录。下面是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)
...
https://github.com/mesonbuild/meson/blob/e2c454b86e5fcb2dbbabe33199dc4b877dcdb95d/mesonbuild/interpreter/interpreter.py L2228
在您的示例中,bar.hpp
的fname
将是bar.hpp
,因此将没有路径。子目录由files()
存储,但保存在不同的属性中。我不能评论为什么要这样实施。我不是一个Meson开发者。
Meson发行说明中的示例显示了文件名中包含的路径:
https://mesonbuild.com/release笔记- - 0 - 63 - 0. - html # added-preserve_path-arg-to-install_headers