#c #windows #cmake
#c #Windows #cmake
Вопрос:
У меня есть C /Qt
библиотека, которую я написал сам. Я понимаю, что для ее распространения необходимо установить cmake . 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")
И я получаю файлы, которые должны быть в каталоге C:Program Files (x86)my_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 для моей библиотеки надо как-то его установить. Однако информацию в интернете на этот счет я нашел очень крутую, без пояснений и примеров (не там искал?). Тем не менее, как и где записывать эти файлы конфигурации для библиотек?
Комментарии:
1. Для установки есть опция «ЭКСПОРТ», которая может сгенерировать для вас такой файл конфигурации, см. cmake.org/cmake/help/v3.13/command /…
Ответ №1:
Я не получил окончательного понимания, но я понял, что написать, чтобы правильно экспортировать библиотеку.
CMakeLists.txt
:
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")