在Meson构建系统中如何为IDL编译配置include_directories头文件依赖
Meson 0.49 版本下 IDL 构建引入额外头文件目录的配置方法
你需要分两个场景完成配置,分别对应IDL编译阶段的依赖搜索、以及生成的头文件供项目其他目标调用的路径配置:
1. 配置widl编译IDL时的搜索路径
widl和gcc类似,使用-I参数指定头文件、IDL依赖文件的搜索目录,直接把需要添加的路径作为-I参数追加到generator的arguments列表中即可,修改后的示例代码如下:
# 定义需要添加的所有包含目录,支持项目内相对路径、系统绝对路径 extra_idl_includes = [ '-I' + meson.current_source_dir() / 'include', # 当前meson.build所在源码目录下的include文件夹 '-I' + meson.project_source_root() / 'submodules/foo/idl', # 项目根目录下的第三方IDL文件夹 '-I' + '/usr/local/share/idl' # 系统级IDL路径 ] idl_compiler = find_program('widl') idl_generator = generator(idl_compiler, output : [ '@BASENAME@.h' ], arguments : [ '-h', extra_idl_includes, '-o', '@OUTPUT@', '@INPUT@' ]) idl_files = [ .... ] header_files = idl_generator.process(idl_files)
注:Meson 0.49 已支持使用
/运算符拼接路径,无需使用旧版的join_paths接口。
2. 配置业务目标识别生成的头文件路径
通过generator生成的头文件默认存储在构建目录下和当前meson.build对应的路径中,需要将该路径添加到依赖这些头文件的业务目标的include_directories中,示例如下:
# 声明生成头文件所在的构建目录为公共包含路径 generated_idl_include = include_directories(meson.current_build_dir()) # 示例:编译可执行文件时引入该路径 executable( 'my_app', sources: ['main.c', 'utils.c', header_files], include_directories: [generated_idl_include] )
跨子目录复用的简化配置
如果生成的IDL头文件需要被多个子目录的目标引用,可以封装为依赖项避免重复配置:
# 在IDL对应的meson.build中声明公共依赖 idl_dep = declare_dependency( include_directories: generated_idl_include, sources: header_files )
其他子目录的目标直接添加dependencies : [idl_dep]即可自动引入头文件路径,无需额外配置。
内容的提问来源于stack exchange,提问作者debonair
相关产品推荐
相关产品推荐

