CMake无法通过find_package找到已安装的Crypto++库求助
解决CMake找不到通过apt安装的Crypto++库的问题
通过sudo apt install libcrypto++-dev安装的Crypto++开发包,并没有提供CMake官方认可的配置文件(CryptoPPConfig.cmake或cryptopp-config.cmake),所以默认的find_package(CryptoPP REQUIRED)会报错。以下是几种可行的解决方法:
方法一:手动查找库和头文件(推荐)
直接用find_library和find_path定位库文件与头文件,无需依赖CMake配置文件:
# 查找Crypto++库 find_library(CRYPTOPP_LIBRARY NAMES cryptopp) # 查找Crypto++头文件目录(头文件都在cryptopp子目录下) find_path(CRYPTOPP_INCLUDE_DIR NAMES cryptopp/cryptlib.h) # 检查是否找到,没找到就终止构建 if(NOT CRYPTOPP_LIBRARY) message(FATAL_ERROR "未找到Crypto++库文件") endif() if(NOT CRYPTOPP_INCLUDE_DIR) message(FATAL_ERROR "未找到Crypto++头文件目录") endif() # 将库和头文件关联到你的目标 add_executable(你的可执行文件名 你的源码文件.cpp) target_include_directories(你的可执行文件名 PRIVATE ${CRYPTOPP_INCLUDE_DIR}) target_link_libraries(你的可执行文件名 PRIVATE ${CRYPTOPP_LIBRARY})
方法二:自定义FindCryptoPP.cmake模块
如果坚持要用find_package命令,可以自己编写CMake模块文件:
- 在项目根目录创建
cmake/modules文件夹,新建FindCryptoPP.cmake文件,内容如下:
find_path(CRYPTOPP_INCLUDE_DIR NAMES cryptopp/cryptlib.h) find_library(CRYPTOPP_LIBRARY NAMES cryptopp) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(CryptoPP DEFAULT_MSG CRYPTOPP_LIBRARY CRYPTOPP_INCLUDE_DIR) if(CRYPTOPP_FOUND) set(CryptoPP_INCLUDE_DIRS ${CRYPTOPP_INCLUDE_DIR}) set(CryptoPP_LIBRARIES ${CRYPTOPP_LIBRARY}) endif() mark_as_advanced(CRYPTOPP_INCLUDE_DIR CRYPTOPP_LIBRARY)
- 在项目的CMakeLists.txt开头添加模块路径,然后调用
find_package:
# 添加自定义模块路径 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/") # 现在可以正常调用find_package了 find_package(CryptoPP REQUIRED) add_executable(你的可执行文件名 你的源码文件.cpp) target_link_libraries(你的可执行文件名 PRIVATE ${CryptoPP_LIBRARIES}) target_include_directories(你的可执行文件名 PRIVATE ${CryptoPP_INCLUDE_DIRS})
方法三:直接指定系统安装路径(临时测试用)
由于apt默认将Crypto++的头文件安装在/usr/include/cryptopp,库文件在/usr/lib,可以直接硬编码路径快速测试:
add_executable(你的可执行文件名 你的源码文件.cpp) # 头文件目录指定为/usr/include,因为源码里是#include <cryptopp/xxx.h> target_include_directories(你的可执行文件名 PRIVATE /usr/include) # 直接链接cryptopp库 target_link_libraries(你的可执行文件名 PRIVATE cryptopp)
内容的提问来源于stack exchange,提问作者user13134124
相关产品推荐
相关产品推荐

