首页 > 解决方案 > 如何使用配置文件创建一个 cmake 库项目?

问题描述

我完全被卡住了:/。我创建了一个简单的测试“库”,其中包含两个文件fruits.cppfruits.h.

然后我创建了这个CMakeLists.txt(按照本教程

cmake_minimum_required(VERSION 3.16)

project(fruits_Lib)

add_library(fruits_Lib STATIC)

target_sources(fruits_Lib
  PRIVATE
    "fruits.cpp"
)

set(include_dest "include/fruits-1.0")
set(main_lib_dest "lib/fruits-1.0")
set(lib_dest "${main_lib_dest}/${CMAKE_BUILD_TYPE}")

target_include_directories(fruits_Lib
  PUBLIC
    "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
    "$<INSTALL_INTERFACE:${include_dest}>"
)

add_library(fruits::fruits ALIAS fruits_Lib)

install(TARGETS fruits_Lib EXPORT fruits DESTINATION "${main_lib_dest}")
install(FILES "include/fruits/fruits.h" DESTINATION "${include_dest}")
install(EXPORT fruits DESTINATION "${lib_dest}")

这可以编译和安装等,我什至可以add_subdirectory在父项目中使用它。

事实上,这个安装的文件是:

lib/fruits-1.0/libfruits_Lib.a
lib/fruits-1.0/Debug/fruits-debug.cmake
lib/fruits-1.0/Debug/fruits.cmake
lib/fruits-1.0/libfruits_Libd.a
lib/fruits-1.0/Release/fruits-release.cmake
lib/fruits-1.0/Release/fruits.cmake
include/fruits-1.0/fruits.h

但是,当我尝试在父项目中执行以下操作时:

find_package(fruits CONFIG REQUIRED)

我得到错误:

CMake Error at CMakeLists.txt:21 (find_package):
  Could not find a package configuration file provided by "fruits" with any
  of the following names:

    fruitsConfig.cmake
    fruits-config.cmake

这些文件绝对不是由上面创建或安装的CMakeLists.txt:/。

我究竟做错了什么?如何创建一个提供此类配置文件的静态库,以便我可以使用它(安装后)find_package(fruits CONFIG)

标签: cmake

解决方案


我认为find_package()是用于定位和使用外部和已安装的组件/库,因此您必须先安装库。


推荐阅读