update
This commit is contained in:
parent
c41683d9e2
commit
d931b5aaea
@ -1 +1 @@
|
|||||||
Subproject commit c651ba0ef064734b6457684c780f8c863f0956bf
|
Subproject commit ce6b18660a933855dbe996fc5b5d3d0ac1c25223
|
@ -248,21 +248,22 @@ set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "CMake project example")
|
|||||||
set(CPACK_DEBIAN_PACKAGE_SECTION "misc")
|
set(CPACK_DEBIAN_PACKAGE_SECTION "misc")
|
||||||
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
|
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
|
||||||
set(CPACK_SOURCE_IGNORE_FILES
|
set(CPACK_SOURCE_IGNORE_FILES
|
||||||
${CMAKE_BINARY_DIR}
|
"${CMAKE_BINARY_DIR}"
|
||||||
.git/
|
"/\\\\.git/"
|
||||||
.git$
|
"/\\\\.gitlab-ci/"
|
||||||
.gitlab-ci/
|
"^${CMAKE_SOURCE_DIR}/.?build.?/"
|
||||||
_output/
|
"^${CMAKE_SOURCE_DIR}/.?output.?/"
|
||||||
files/lib
|
"^${CMAKE_SOURCE_DIR}/files/lib"
|
||||||
files/log
|
"^${CMAKE_SOURCE_DIR}/files/log"
|
||||||
.clang-tidy
|
"\\\\.clang-tidy$"
|
||||||
.cmake-format
|
"\\\\.cmake-format$"
|
||||||
.gitignore
|
"\\\\.gitignore$"
|
||||||
.gitmodules
|
"\\\\.gitattributes$"
|
||||||
.gitlab-ci.yml
|
"\\\\.gitmodules$"
|
||||||
CMakeLists.txt.user.*
|
"\\\\.gitlab-ci.yml"
|
||||||
~$
|
"CMakeLists.txt.user.*"
|
||||||
\\\\..*\\\\.swp$)
|
"~$"
|
||||||
|
"\\\\.swp$")
|
||||||
----
|
----
|
||||||
|
|
||||||
Произведённые изменения можно зафиксировать:
|
Произведённые изменения можно зафиксировать:
|
||||||
@ -354,23 +355,28 @@ make uninstall
|
|||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
== Архивирование проекта
|
== Архивирование проекта и создание пакетов
|
||||||
|
|
||||||
Стандартный модуль `CPack` предназначен для архивирования исходных
|
Стандартный модуль `CPack` предназначен для архивирования исходных
|
||||||
текстов проекта и создания пакетов для установки в целевую систему.
|
текстов проекта и создания пакетов для установки в целевую систему.
|
||||||
Необходимые переменные устанавливаются в файле `cmake/etc/Variables.cmake`
|
Необходимые переменные устанавливаются в файле `cmake/etc/Variables.cmake`
|
||||||
<<variables-cmake,см. выше>>.
|
<<variables-cmake,см. выше>>.
|
||||||
|
|
||||||
По умолчанию цель для упаковки исходных текстов называется `package_source`.
|
Устанавливаемые файлы делятся на две группы `MAIN` и `DEV` с помощью
|
||||||
В библиотеке CMLib определены значения основных параметров,
|
параметра `COMPONENT` функции `install`. В группу `MAIN` необходимо
|
||||||
а также дополнительная цель `dist`.
|
помещать файлы для установки на целевую систему (исполняемые файлы,
|
||||||
|
файлы настроек, файлы данных, разделяемые библиотеки), а в группу `DEV` ---
|
||||||
|
для установки на систему для разработки (заголовочные файлы, статические
|
||||||
|
библиотеки).
|
||||||
|
|
||||||
Для создания бинарных пакетов нужно выполнить в каталоге сборки команду `cpack`.
|
По умолчанию цель для упаковки исходных текстов называется `package_source`.
|
||||||
|
Бинарные пакеты создаются программой `cpack`. Пример:
|
||||||
|
|
||||||
[source,sh]
|
[source,sh]
|
||||||
----
|
----
|
||||||
cd _build/debug
|
cd _build/debug
|
||||||
make dist
|
make
|
||||||
|
make package_source
|
||||||
cpack
|
cpack
|
||||||
----
|
----
|
||||||
|
|
||||||
@ -422,12 +428,10 @@ add_dependencies(cmlib-example create_auxilary_symlinks)
|
|||||||
set(TRGT cmlib-example)
|
set(TRGT cmlib-example)
|
||||||
|
|
||||||
# Список файлов исходных текстов
|
# Список файлов исходных текстов
|
||||||
set(TRGT_sources
|
set(TRGT_sources ${CMAKE_CURRENT_SOURCE_DIR}/init.cpp)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/init.cpp)
|
|
||||||
|
|
||||||
# Список заголовочных файлов (используется для установки)
|
# Список заголовочных файлов (используется для установки)
|
||||||
set(TRGT_headers
|
set(TRGT_headers ${CMAKE_CURRENT_SOURCE_DIR}/init.hpp)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/init.hpp)
|
|
||||||
|
|
||||||
# Функция для создания цели, результатом которой будет сборка библиотеки
|
# Функция для создания цели, результатом которой будет сборка библиотеки
|
||||||
add_common_library(TARGET ${TRGT} SOURCES ${TRGT_sources})
|
add_common_library(TARGET ${TRGT} SOURCES ${TRGT_sources})
|
||||||
@ -438,30 +442,22 @@ target_include_directories(${TRGT} SYSTEM PUBLIC ${Boost_INCLUDE_DIRS})
|
|||||||
|
|
||||||
# Цель, используемая только для установки
|
# Цель, используемая только для установки
|
||||||
# заголовочных файлов без компиляции проекта
|
# заголовочных файлов без компиляции проекта
|
||||||
add_custom_target(
|
add_custom_target(${TRGT}-install-headers COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=DEV -P
|
||||||
${TRGT}-install-headers
|
|
||||||
COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=headers -P
|
|
||||||
"${CMAKE_BINARY_DIR}/cmake_install.cmake")
|
"${CMAKE_BINARY_DIR}/cmake_install.cmake")
|
||||||
|
|
||||||
# Установка статической библиотеки
|
# Установка статической библиотеки
|
||||||
install(TARGETS ${TRGT}_static
|
install(TARGETS ${TRGT}_static COMPONENT DEV ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
||||||
|
|
||||||
# Установка динамической библиотеки
|
# Установка динамической библиотеки
|
||||||
if(BUILD_SHARED_LIBS)
|
if(BUILD_SHARED_LIBS)
|
||||||
install(TARGETS ${TRGT}_shared
|
install(TARGETS ${TRGT}_shared COMPONENT DEV LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Установка заголовочных файлов
|
# Установка заголовочных файлов
|
||||||
install(
|
install(FILES ${TRGT_headers} COMPONENT DEV DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${TRGT})
|
||||||
FILES ${TRGT}_headers
|
|
||||||
COMPONENT headers
|
|
||||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${TRGT})
|
|
||||||
|
|
||||||
# Установка файла для pkg-config
|
# Установка файла для pkg-config
|
||||||
install(FILES ${CMAKE_BINARY_DIR}/${TRGT}.pc
|
install(FILES ${CMAKE_BINARY_DIR}/${TRGT}.pc COMPONENT DEV DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
@ -498,105 +494,107 @@ int32_t cmlib_example_init(int32_t i = 0)
|
|||||||
}
|
}
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ПИШУ ЗДЕСЬ!!!
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
=== Базовое приложение
|
=== Базовое приложение
|
||||||
|
|
||||||
Проект с базовым приложением реализован на основе <<base-project,базового проекта>>.
|
Проект с базовым приложением реализован на основе <<base-project,базового проекта>>.
|
||||||
Исходные тексты содержат комментарии, объясняющие назначение используемых функций.
|
Исходные тексты содержат комментарии, объясняющие назначение используемых функций.
|
||||||
Проект можно посмотреть https://git.246060.ru/f1x1t/cmlib-example-application[здесь]
|
Проект можно посмотреть https://git.246060.ru/f1x1t/cmlib-example-app[здесь]
|
||||||
или сделать его копию командой:
|
или сделать его копию командой:
|
||||||
|
|
||||||
[source,sh]
|
[source,sh]
|
||||||
----
|
----
|
||||||
git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-application
|
git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-app
|
||||||
----
|
----
|
||||||
|
|
||||||
В файл `CMakeLists.txt`, находящийся в корневом каталоге проекта, нужно добавить:
|
В файл `CMakeLists.txt`, находящийся в корневом каталоге проекта, нужно добавить:
|
||||||
|
|
||||||
|
[source,cmake]
|
||||||
|
----
|
||||||
|
# Boost
|
||||||
|
set(Boost_USE_STATIC_LIBS ON)
|
||||||
|
set(Boost_USE_MULTITHREADED OFF)
|
||||||
|
set(Boost_USE_STATIC_RUNTIME ON)
|
||||||
|
find_package(Boost 1.55.0 REQUIRED COMPONENTS headers)
|
||||||
|
|
||||||
|
# Автоматически генерируемый заголовочный файл
|
||||||
|
cmlib_config_hpp_generate()
|
||||||
|
|
||||||
|
# Приложение
|
||||||
|
add_subdirectory(src/cmlib-example)
|
||||||
|
|
||||||
|
# Документация
|
||||||
|
add_subdirectory(cmake/doc)
|
||||||
|
|
||||||
|
# Создание вспомогательных символических ссылок
|
||||||
|
add_dependencies(cmlib-example create_auxilary_symlinks)
|
||||||
|
----
|
||||||
|
|
||||||
|
В подкаталоге `src/cmlib-example` нужно создать файл `CMakeLists.txt`:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
В файле `cmex/CMakeLists.txt` должна быть строка, включающая поиск файла
|
|
||||||
`CMakeLists.txt` в подкаталоге `src/cmex`:
|
|
||||||
|
|
||||||
[source,cmake]
|
[source,cmake]
|
||||||
----
|
----
|
||||||
add_subdirectory(src/cmex)
|
# Название основной цели и имя библиотеки в текущем каталоге
|
||||||
|
set(TRGT cmlib-example)
|
||||||
|
|
||||||
|
# Список файлов исходных текстов
|
||||||
|
set(TRGT_sources ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp)
|
||||||
|
|
||||||
|
# Функция для создания цели, результатом которой будет сборка приложения
|
||||||
|
add_executable(${TRGT} ${TRGT_sources})
|
||||||
|
common_target_properties(${TRGT})
|
||||||
|
|
||||||
|
# Добавление к пути поиска заголовочных файлов
|
||||||
|
target_include_directories(${TRGT} SYSTEM PUBLIC ${Boost_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
# Имя целевого каталога и выходного файла для цели
|
||||||
|
set_target_properties(${TRGT}
|
||||||
|
PROPERTIES
|
||||||
|
OUTPUT_NAME ${TRGT}
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Правила для установки
|
||||||
|
install(TARGETS ${TRGT} COMPONENT MAIN RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||||
----
|
----
|
||||||
|
|
||||||
В каталоге `cmex/src/cmex` нужно создать файл `main.cpp`:
|
и файл `main.cpp`:
|
||||||
|
|
||||||
[source,cpp]
|
[source,cpp]
|
||||||
----
|
----
|
||||||
#include "compiler_features.hpp"
|
#include "compiler_features.hpp"
|
||||||
#include "cmlib_config.hpp"
|
#include "cmlib_private_config.hpp"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <boost/range/counting_range.hpp>
|
||||||
|
|
||||||
#include "cmex.hpp"
|
int32_t nsum(int32_t i = 0)
|
||||||
|
{
|
||||||
|
int32_t s = 0;
|
||||||
|
for ( auto r : boost::counting_range( 1, i ) )
|
||||||
|
{
|
||||||
|
s += r;
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char* argv[])
|
||||||
std::cout << CMEX_COMPILER_VERSION_MAJOR << std::endl; // Значение из compiler_features.hpp
|
{
|
||||||
std::cout << BUILD_TYPE << std::endl; // Значение из cmlib_config.hpp
|
// Значение из compiler_features.hpp
|
||||||
std::cout << CMEX_VERSION_STR << std::endl; // Значение из cmlib_config.hpp
|
std::cout << CMLIB_EXAMPLE_APP_COMPILER_VERSION_MAJOR << std::endl;
|
||||||
std::cout << cmex_init(4) << std::endl; // Функция из внутренней библиотеки
|
// Значение из cmlib_private_config.hpp
|
||||||
return 0;
|
std::cout << CMLIB_BUILD_TYPE << std::endl;
|
||||||
|
// Значение из cmlib_private_config.hpp
|
||||||
|
std::cout << CMLIB_BUILD_DATE << std::endl;
|
||||||
|
|
||||||
|
auto s = nsum( argc );
|
||||||
|
std::cout << s << std::endl;
|
||||||
|
|
||||||
|
return ( s );
|
||||||
}
|
}
|
||||||
----
|
----
|
||||||
|
|
||||||
и файл `CMakeLists.txt`:
|
|
||||||
|
|
||||||
[source,cmake]
|
|
||||||
----
|
|
||||||
# Название основной цели в текущем каталоге
|
|
||||||
set(current_target cmex_app)
|
|
||||||
|
|
||||||
# Список файлов исходных текстов
|
|
||||||
set(current_target_sources
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
# Цель для создания исполняемого файла
|
|
||||||
add_executable(${current_target} ${current_target_sources})
|
|
||||||
common_target_properties(${current_target})
|
|
||||||
|
|
||||||
# Зависимость от библиотеки из текущего проекта
|
|
||||||
add_dependencies(${current_target} cmex)
|
|
||||||
|
|
||||||
# Добавление внутреннего каталога src/libcmex к списку путей для поиска заголовочных файлов
|
|
||||||
target_include_directories(${current_target} PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/libcmex>)
|
|
||||||
|
|
||||||
# Имя выходного файла для цели (параметр OUTPUT_NAME)
|
|
||||||
set_target_properties(${current_target}
|
|
||||||
PROPERTIES
|
|
||||||
OUTPUT_NAME cmex
|
|
||||||
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Путь поиска библиотек внутри проекта
|
|
||||||
link_directories(${CMAKE_INSTALL_LIBDIR})
|
|
||||||
|
|
||||||
# Сначала внутренние статические библиотеки
|
|
||||||
target_link_libraries(${current_target} cmex_static)
|
|
||||||
|
|
||||||
# Правила для установки
|
|
||||||
install(TARGETS ${current_target} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
||||||
----
|
|
||||||
|
|
||||||
|
ПИШУ ЗДЕСЬ!!!
|
||||||
|
|
||||||
|
|
||||||
== Подключение внешнего проекта
|
== Подключение внешнего проекта
|
||||||
|
Loading…
Reference in New Issue
Block a user