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必须安装.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_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")
安装时有一个“导出”选项,可以为您生成这样的配置文件,请参阅