sophus库安装好后 通过:locate sophus | grep cmake寻找配置文件
但新文件系统未更新,手动更新数据库 命令:sudo updatedb
rm -rf *删除当前目录下所有文件及目录
find_package返回两个变量:头文件路径XXX_INCLUDE_DIRS,库文件路径XXX_LIBRARIES
例如Eigen3Config.cmake里存有EIGEN3_INCLUDE_DIRS,Eigen库全部由头文件组成,因此不需要库文件路径
target_link_libraries(target items) item可以是 库文件名hello/库文件路径XXX_LIBRARIES/traget (Sophus::Sophus)
SophusConfig.cmake中不包含这些信息,可以使用target
具体在SophusTargets.cmake中给出 :# Create imported target Sophus::Sophus
target_link_libraries中给出target后不用再写incude_directories
主Cmake文件里add_subdirectory(example)指出子文件夹
同时子文件夹中要有子Cmakelists,不需要再写project name
add_subdirectory中有三个参数:source_dir子文件夹绝对/相对路径,binary_dir二进制文件生成路径,EXCLUDE_FROM_ALL不进行编译
但是版本不对只能用${Sophus_LIBRARIES}
解决方法:
find_package(FMT REQUIRED)
include_directories(${FMT_INCLUDE_DIRS})
target_link_libraries(useSophus fmt::fmt)
option(USE_UBUNTU_20 "Set to ON if you are using Ubuntu 20.04" OFF)
if(USE_UBUNTU_20)
message("You are using Ubuntu 20.04, fmt::fmt will be linked")
find_package(fmt REQUIRED)
set(FMT_LIBRARIES fmt::fmt)
endif()
option设置USE_UBUNTU_20变量默认值用来适配不同版本
可通过cmake .. -DUSE_UBUNTU_20=ON修改