使用CMake编译FCL时libccd依赖无法解析的技术问题
解决FCL无法识别libccd的CMake配置问题
针对你遇到的FCL找不到本地编译的libccd问题,给你几个简单可行的解决办法:
方法1:直接修改FCL的CMakeLists.txt(最直接)
既然你已经通过add_subdirectory(libccd)编译好了libccd,完全不需要FCL再去查找它。直接修改FCL根目录下的CMakeLists.txt:
- 找到并注释掉
find_package(ccd QUIET)这一行 - 强制设置
ccd_FOUND为ON,避免FCL跳过相关功能:set(ccd_FOUND ON) - 确保FCL链接到libccd的目标(如果原来的代码里没有的话):
target_link_libraries(fcl PUBLIC ccd)
这样FCL就能直接使用你已经编译好的libccd了。
方法2:在主CMakeLists里引导FCL找到libccd
libccd编译后会在构建目录下生成ccdConfig.cmake这类配置文件,你只需要在主CMakeLists里告诉FCL这个路径:
add_subdirectory(eigen) add_subdirectory(libccd) # 告诉FCL去哪里找libccd的配置文件 set(ccd_DIR ${CMAKE_CURRENT_BINARY_DIR}/libccd) add_subdirectory(fcl)
${CMAKE_CURRENT_BINARY_DIR}/libccd是libccd的构建输出目录(里面包含cmake配置文件),设置这个变量后,FCL的find_package(ccd QUIET)就能成功找到libccd。
方法3:自定义Findccd.cmake文件(无需修改FCL代码)
如果不想改动FCL的源码,可以自己写一个查找libccd的cmake模块:
- 在你的项目根目录创建
cmake/modules文件夹 - 新建
Findccd.cmake文件,内容如下:# 查找libccd的库文件和头文件 find_library(ccd_LIBRARY ccd PATHS ${CMAKE_CURRENT_BINARY_DIR}/libccd) find_path(ccd_INCLUDE_DIR ccd/ccd.h PATHS ${CMAKE_CURRENT_SOURCE_DIR}/libccd/src) if(ccd_LIBRARY AND ccd_INCLUDE_DIR) set(ccd_FOUND ON) # 创建导入目标供FCL使用 add_library(ccd UNKNOWN IMPORTED) set_target_properties(ccd PROPERTIES IMPORTED_LOCATION "${ccd_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${ccd_INCLUDE_DIR}" ) endif() - 在主CMakeLists.txt开头添加:
# 让CMake能找到我们自定义的模块 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
之后再执行原来的add_subdirectory流程,FCL就能通过这个自定义模块找到libccd了。
优先推荐方法1或方法2,操作更简单,适合CMake新手。
内容的提问来源于stack exchange,提问作者TheRobotDude
相关产品推荐
相关产品推荐

