使用apt安装Drake时的Ament CMake传递依赖问题
解决依赖Drake的base_lib包下游依赖找不到drake::drake的问题
错误原因
base_lib自身构建时能正常找到drake::drake,但在导出CMake配置时,没有将Drake作为依赖传递给下游包。当下游包执行find_package(base_lib)后,CMake解析base_lib的链接接口时,发现依赖drake::drake但未触发对Drake的查找,因此报错。
解决方案
在base_lib的CMakeLists.txt中添加导出Drake依赖的命令,让下游包自动知晓需要先查找Drake。
具体修改
在ament_export_targets(export_${PROJECT_NAME})之后新增一行:
ament_export_dependencies(drake)
修改后的相关代码片段:
ament_export_include_directories(include/${PROJECT_NAME}) ament_export_targets(export_${PROJECT_NAME}) ament_export_dependencies(drake) # 新增该行 ament_export_libraries(${PROJECT_NAME})
额外说明
- 完成修改后,下游包执行
find_package(base_lib)时会自动触发find_package(drake),无需手动添加(前提是Drake的安装路径/opt/drake在CMake的CMAKE_PREFIX_PATH中,或者base_lib中find_package(drake)的配置能正确传递路径信息)。 - 若下游包仍无法找到Drake,可在其CMakeLists.txt中添加
list(APPEND CMAKE_PREFIX_PATH /opt/drake),或确保系统环境变量CMAKE_PREFIX_PATH包含/opt/drake。
内容的提问来源于stack exchange,提问作者Wei Ding
相关产品推荐
相关产品推荐

