如何在CMake中引入未全局安装的DecompUtil项目并解决报错?
解决DecompUtil库CMake配置错误的方案
你遇到的错误核心原因是同时混用了add_subdirectory和find_package:add_subdirectory已经将DecompUtil的构建直接集成到当前项目中,但你又用find_package去查找它的配置文件,而DecompUtil默认构建后不会生成DecompUtilConfig.cmake这类配置文件(除非执行安装步骤),因此CMake报错。
以下是两种可行的解决方法:
方法一:直接通过add_subdirectory集成(推荐)
这种方式不需要安装DecompUtil,直接将其作为项目子模块构建,修改你的CMakeLists.txt如下:
cmake_minimum_required(VERSION 3.8) project(test) # 将DecompUtil作为子目录添加,CMake会自动构建该库 add_subdirectory(DecompUtil) # 生成可执行文件 add_executable(test src/test.cpp) # 链接DecompUtil库,CMake会自动处理其依赖的头文件路径 target_link_libraries(test PRIVATE DecompUtil) install(TARGETS test DESTINATION lib/${PROJECT_NAME})
关键说明:
- 移除了
list(APPEND CMAKE_MODULE_PATH)和find_package(DecompUtil REQUIRED):这两行完全多余,因为add_subdirectory已经把DecompUtil的构建逻辑纳入当前项目,不需要再查找配置文件。 target_link_libraries(test PRIVATE DecompUtil):DecompUtil的CMake配置会生成名为DecompUtil的目标,链接后CMake会自动将该库的头文件目录添加到你的可执行文件的包含路径中,因此无需手动调用include_directories。
方法二:先安装DecompUtil再通过find_package查找
如果你希望将DecompUtil作为独立库安装到系统或指定路径,再在项目中引用,按以下步骤操作:
步骤1:安装DecompUtil
进入DecompUtil目录,执行构建并安装(可指定自定义安装路径):
cd DecompUtil mkdir build && cd build # 指定安装路径为DecompUtil目录下的install文件夹,也可改为系统路径如/usr/local cmake .. -DCMAKE_INSTALL_PREFIX=../install make && make install
步骤2:修改项目的CMakeLists.txt
cmake_minimum_required(VERSION 3.8) project(test) # 设置DecompUtil的安装路径,指向包含DecompUtilConfig.cmake的目录 # 路径为你刚才指定的安装路径下的lib/cmake/DecompUtil set(DecompUtil_DIR "${PROJECT_SOURCE_DIR}/DecompUtil/install/lib/cmake/DecompUtil") # 查找DecompUtil库 find_package(DecompUtil REQUIRED) add_executable(test src/test.cpp) # 链接DecompUtil的官方目标(安装后会生成带命名空间的目标) target_link_libraries(test PRIVATE DecompUtil::DecompUtil) install(TARGETS test DESTINATION lib/${PROJECT_NAME})
关键说明:
- 安装后DecompUtil会自动生成
DecompUtilConfig.cmake文件,存放在${CMAKE_INSTALL_PREFIX}/lib/cmake/DecompUtil目录下,通过set(DecompUtil_DIR)指定该路径,find_package就能成功找到库。 - 链接时使用
DecompUtil::DecompUtil命名空间目标,这是CMake推荐的现代用法,能确保所有依赖(头文件、编译选项等)都被正确传递。
内容的提问来源于stack exchange,提问作者eightfingers
相关产品推荐
相关产品推荐

