Cmake 递归搜索头文件

Cmake 递归搜索头文件

若要对一个包含了多个子目录的目录中的每一个头文件都进行搜索和引用,会使用到file命令搜索。

// 搜索include文件夹下的头文件 将其目录存储到HEAD_LIST中。
file(GLOB_RECURSE HEAD_LIST ${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp)

头文件目录
但实际上我们用message输出HEAD_LIST时,发现这些目录都是包含头文件名称的。
这样就没法用include_directories(${HEAD_LIST}) 语句快速包含头这些文件路径,因为这条语句只能识别到的路径末端为目录的路径,路径末端是文件名的路径无法识别。

head_LIST=
/home/xx/Software/ros2/test02/include/head01/heada.hpp
/home/xx/Software/ros2/test02/include/head02/headb.hpp

解决方法

在file语句中加入子语句 LIST_DIRECTORIES true ,这样HEAD_LIST将会包含这些文件的路径,但路径末端不是文件名而是最后一级的目录名称。

// 搜索include文件夹下的头文件 将其目录存储到HEAD_LIST中。
file(GLOB_RECURSE HEAD_LIST LIST_DIRECTORIES true  ${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp)

可以用message查看HEAD_LIST:

head_LIST=
/home/xx/Software/ros2/test02/include/head01
/home/xx/Software/ros2/test02/include/head01/heada.hpp
/home/xx/Software/ros2/test02/include/head02
/home/xx/Software/ros2/test02/include/head02/headb.hpp

此时HEAD_LIST可以直接放到include_directories(${HEAD_LIST}) 里使用,实现了头文件的递归搜索。

参考文献:
[1] 许宏旭. CMake构建实战 项目开发卷[M]. 中国工信部出版社.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值