C++ 使用cmake安装动态库

C++ 使用cmake安装动态库,c++,windows,cmake,C++,Windows,Cmake,我有自己编写的C++/Qt库。我知道,对于其发行版,cmake必须安装.dlldll(或.so用于Linux)文件和头文件。因此,我编写了以下CMakeLists.txt: cmake_minimum_required(VERSION 3.16) project(my_project) set(CMAKE_CXX_STANDARD 14) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) find_packag

我有自己编写的
C++/Qt
库。我知道,对于其发行版,cmake必须安装.dll
dll
(或
.so
用于Linux)文件和头文件。因此,我编写了以下
CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project(my_project)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

find_package(Qt5 COMPONENTS Core Network Sql REQUIRED)

set(HEADERS some_class.h)
set(SOURCES some_class.cpp)

add_library(${PROJECT_NAME} SHARED ${HEADERS} ${SOURCES})

target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Network Qt5::Sql)

install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION "lib"
                                RUNTIME DESTINATION "bin"
                                COMPONENT library)
install(FILES ${HEADERS} DESTINATION "include")
cmake_minimum_required(VERSION 3.16)
project(some_project VERSION 1.0 LANGUAGES CXX)

# Parameters initialization
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

# Search for required libraries
find_package(Qt5 COMPONENTS Core Network Sql REQUIRED)

# Project files
set(HEADERS some_class.h)
set(SOURCES some_class.cpp)

# Building the library
add_library(${PROJECT_NAME} SHARED ${HEADERS} ${SOURCES})

# Linking the necessary libraries
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Network Qt5::Sql)

# Setting which header files should be supplied with the library
set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "${HEADERS}")

# Installing the library
install(TARGETS ${PROJECT_NAME}
        EXPORT "${PROJECT_NAME}-config"
        RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
        LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}"
        ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}"
        PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}"
        PRIVATE_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}"
        INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}")

install(EXPORT "${PROJECT_NAME}-config" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")

export(TARGETS ${PROJECT_NAME} FILE "${PROJECT_NAME}-exports.cmake")
我得到了想要放在目录
C:\ProgramFiles(x86)\my\u project
中的文件:

-- lib/libmy_project.dll.a
-- bin/libmy_project.dll
-- include/some_class.h
但是,一旦我尝试使用测试程序偷偷链接我的库:

find_package(my_project REQUIRED)
# ....
target_link_libraries(${PROJECT_NAME} my_project) 
我有一个错误:

By not providing "Findmy_project.cmake" in CMAKE_MODULE_PATH this
  project has asked CMake to find a package configuration file provided by
  "my_project", but CMake did not find one.

  Could not find a package configuration file provided by "my_project"
  with any of the following names:

    my_projectConfig.cmake
    my_project-config.cmake

  Add the installation prefix of "my_project" to CMAKE_PREFIX_PATH or
  set "my_project_DIR" to a directory containing one of the above
  files.  If "my_project" provides a separate development package or
  SDK, be sure it has been installed.

也就是说,他不知道去哪里找他。据我所知,CMake为我的项目提供了一个配置文件,我的库的CMakeLists.txt应该以某种方式安装它。然而,我在互联网上找到的关于这个账户的信息非常陡峭,没有解释和例子(没有吗?)。不过,如何以及在何处为库编写这些配置文件?

我还没有最终理解,但我知道了要编写什么才能正确导出库

CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project(my_project)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

find_package(Qt5 COMPONENTS Core Network Sql REQUIRED)

set(HEADERS some_class.h)
set(SOURCES some_class.cpp)

add_library(${PROJECT_NAME} SHARED ${HEADERS} ${SOURCES})

target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Network Qt5::Sql)

install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION "lib"
                                RUNTIME DESTINATION "bin"
                                COMPONENT library)
install(FILES ${HEADERS} DESTINATION "include")
cmake_minimum_required(VERSION 3.16)
project(some_project VERSION 1.0 LANGUAGES CXX)

# Parameters initialization
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

# Search for required libraries
find_package(Qt5 COMPONENTS Core Network Sql REQUIRED)

# Project files
set(HEADERS some_class.h)
set(SOURCES some_class.cpp)

# Building the library
add_library(${PROJECT_NAME} SHARED ${HEADERS} ${SOURCES})

# Linking the necessary libraries
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Network Qt5::Sql)

# Setting which header files should be supplied with the library
set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "${HEADERS}")

# Installing the library
install(TARGETS ${PROJECT_NAME}
        EXPORT "${PROJECT_NAME}-config"
        RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
        LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}"
        ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}"
        PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}"
        PRIVATE_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}"
        INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}")

install(EXPORT "${PROJECT_NAME}-config" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")

export(TARGETS ${PROJECT_NAME} FILE "${PROJECT_NAME}-exports.cmake")
安装时有一个“导出”选项,可以为您生成这样的配置文件,请参阅