CMake调用第三方库的两种方法
项目中经常要使用到第三方库,在链接时,为了让链接器能搜索到库,一般有两种方法,一是通过link_directories命令增加链接的库路径;二是通过find_library命令方法。
- link_directories命令
- 使用步骤
## 在add_executable或add_library前引入第三方库 # 1.引入第三方库,${THIRD_PARTY_PREFIX}为用户定义的第三方库目录 link_directories(${THIRD_PARTY_PREFIX}/lib) # 2.增加第三方库头文件目录 include_directories(${THIRD_PARTY_PREFIX}/include) # 3.给目标增加依赖库(如main) target_link_libraries(main PRIVATE freetype)
- 参考资料
命令介绍
- find_library命令
link_directories命令不需要cmake配置文件,只需要给出库的路径就可以了,使用相对简单,但不适合跨平台项目。而find_library会到类似XxxConfig.cmake 或 xxx-config.cmake 或 FindXxx.cmake文件去找动态库或静态库,如果自己写的库,或者第三方库没有对应的配置文件,需要自己编写对应的cmake config文件,相对于link_directories方法,就有些麻烦。
- 使用步骤
# 1.THIRD_PARTY_PREFIX加入到find_package搜索路径
set(CMAKE_PREFIX_PATH ${THIRD_PARTY_PREFIX})
# 2.搜索freetype库
find_package(freetype REQUIRED)
# 3.给目标添加依赖库
target_link_libraries(main PRIVATE freetype)
- 参考资料
命令介绍
- find_package cmake config文件生成方法
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
${PROJECT_NAME}ConfigVersion.cmake
VERSION ${PACKAGE_VERSION}
COMPATIBILITY SameMajorVersion)
install(
EXPORT ${PROJECT_NAME}Targets
FILE ${PROJECT_NAME}Targets.cmake
DESTINATION lib/cmake/)
configure_package_config_file(
cmake/config.cmake.in ${PROJECT_NAME}Config.cmake
INSTALL_DESTINATION lib/cmake/)
install(
FILES ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
DESTINATION lib/cmake/)
## config.cmake.in文件内容
@PACKAGE_INIT@
# include(CMakeFindDependencyMacro)
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
find_dependency(spdlog REQUIRED)
check_required_components("@PROJECT_NAME@")