update
This commit is contained in:
parent
fff4e996d2
commit
5bf5a20624
@ -383,7 +383,7 @@ cpack
|
|||||||
|
|
||||||
== Примеры библиотек и приложений
|
== Примеры библиотек и приложений
|
||||||
|
|
||||||
|
[[base-lib-project]]
|
||||||
=== Базовая библиотека
|
=== Базовая библиотека
|
||||||
|
|
||||||
Проект с базовой библиотекой реализован на основе <<base-project,базового проекта>>.
|
Проект с базовой библиотекой реализован на основе <<base-project,базового проекта>>.
|
||||||
@ -494,6 +494,8 @@ int32_t cmlib_example_init(int32_t i = 0)
|
|||||||
}
|
}
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
|
[[base-app-project]]
|
||||||
=== Базовое приложение
|
=== Базовое приложение
|
||||||
|
|
||||||
Проект с базовым приложением реализован на основе <<base-project,базового проекта>>.
|
Проект с базовым приложением реализован на основе <<base-project,базового проекта>>.
|
||||||
@ -594,132 +596,93 @@ int main(int argc, char* argv[])
|
|||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
ПИШУ ЗДЕСЬ!!!
|
=== Подключение внешнего проекта
|
||||||
|
|
||||||
|
Проект, использующий для сборки внешний проект, реализован на основе проектов
|
||||||
|
<<base-lib-project,базовой библиотеки>> и <<base-app-project,базового приложения>>.
|
||||||
|
Исходные тексты содержат комментарии, объясняющие назначение используемых функций.
|
||||||
|
Проект можно посмотреть https://git.246060.ru/f1x1t/cmlib-example-app-ext[здесь]
|
||||||
|
или сделать его копию командой:
|
||||||
|
|
||||||
== Подключение внешнего проекта
|
[source,sh]
|
||||||
|
|
||||||
В каталоге `cmex/thirdparty` нужно создать каталог `cmext` с проектом,
|
|
||||||
состоящим из файла `cmext.hpp`:
|
|
||||||
|
|
||||||
[source,c]
|
|
||||||
----
|
----
|
||||||
#ifndef CMEXT_CMEXT_HPP_
|
git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-app-ext
|
||||||
#define CMEXT_CMEXT_HPP_
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
int32_t cmext_init(int32_t i);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
----
|
----
|
||||||
|
|
||||||
файла `cmext.cpp`:
|
Для подключения проекта базовой библиотеки нужно выполнить:
|
||||||
|
|
||||||
[source,c]
|
[source,sh]
|
||||||
----
|
----
|
||||||
#include "cmext.hpp"
|
git submodule add https://git.246060.ru/f1x1t/cmlib-example-library thirdparty/cmlib-example-library
|
||||||
|
git submodule update --init --recursive
|
||||||
int32_t cmext_init(int32_t i = 0) {
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
и файла `CMakeLists.txt`:
|
|
||||||
|
|
||||||
[source,cmake]
|
|
||||||
----
|
|
||||||
cmake_minimum_required(VERSION 3.3)
|
|
||||||
project(cmext)
|
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
|
||||||
add_library(cmext cmext.cpp)
|
|
||||||
install(TARGETS cmext ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
||||||
install(FILES cmext.hpp COMPONENT headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${CMAKE_PROJECT_NAME})
|
|
||||||
----
|
|
||||||
|
|
||||||
В файле `cmex/CMakeLists.txt` нужно подключить стандартный модуль
|
|
||||||
`ExternalProject` и описать правила для его загрузки, настройки,
|
|
||||||
компиляции и установки для сопряжения с текущим проектом:
|
|
||||||
|
|
||||||
[source,cmake]
|
|
||||||
----
|
|
||||||
# Подключение внешних проектов
|
|
||||||
include(ExternalProject)
|
|
||||||
|
|
||||||
ExternalProject_Add(cmext
|
|
||||||
EXCLUDE_FROM_ALL TRUE
|
|
||||||
SOURCE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/cmext
|
|
||||||
INSTALL_DIR ${CMAKE_BINARY_DIR}
|
|
||||||
DOWNLOAD_COMMAND ""
|
|
||||||
BUILD_BYPRODUCTS <INSTALL_DIR>/lib/libcmext.a
|
|
||||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_BUILD_TYPE=Release
|
|
||||||
)
|
|
||||||
----
|
----
|
||||||
|
|
||||||
Вызовы этих функций нужно сделать до функций `add_subdirectories`, чтобы
|
Вызовы этих функций нужно сделать до функций `add_subdirectories`, чтобы
|
||||||
в подключенных подкаталогах можно было использовать цель `cmext` для
|
в подключенных подкаталогах можно было использовать цель `cmext` для
|
||||||
определения зависимостей.
|
определения зависимостей.
|
||||||
|
|
||||||
В файле `cmex/src/cmex/CMakeLists.txt` нужно подключить внешний проект
|
В файл `CMakeLists.txt`, находящийся в корневом каталоге проекта, перед функциями
|
||||||
`cmext`:
|
`add_subdirectories` нужно добавить:
|
||||||
|
|
||||||
|
[source,cmake]
|
||||||
|
----
|
||||||
|
# Подключение внешних проектов
|
||||||
|
include(ExternalProject)
|
||||||
|
|
||||||
|
ExternalProject_Add(ext-lib
|
||||||
|
EXCLUDE_FROM_ALL TRUE
|
||||||
|
SOURCE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/cmlib-example-library
|
||||||
|
INSTALL_DIR ${CMAKE_BINARY_DIR}
|
||||||
|
DOWNLOAD_COMMAND ""
|
||||||
|
BUILD_BYPRODUCTS <INSTALL_DIR>/lib/libcmlib-example.a
|
||||||
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_BUILD_TYPE=Release
|
||||||
|
)
|
||||||
|
----
|
||||||
|
|
||||||
|
В результате будет создана цель `ext-lib`, являющаяся результатом сборки
|
||||||
|
подключённой библиотеки. Все функции `ExternalProject_Add` необходимо располагать
|
||||||
|
перед функциям `add_subdirectories`, чтобы в указанных подкаталогах можно было
|
||||||
|
использовать добавленные цели для определения зависимостей.
|
||||||
|
|
||||||
|
В файле `src/cmlib-example/CMakeLists.txt` нужно подключить внешний проект `ext-lib`:
|
||||||
|
|
||||||
[source,cmake]
|
[source,cmake]
|
||||||
----
|
----
|
||||||
# Зависимость от библиотеки из внешнего проекта проекта
|
# Зависимость от библиотеки из внешнего проекта проекта
|
||||||
add_dependencies(${current_target} cmext)
|
add_dependencies(${TRGT} ext-lib)
|
||||||
|
|
||||||
|
# Добавление каталога, в который устанавливаются заголовочные файлы
|
||||||
|
# от внешнего проекта, к списку путей для поиска
|
||||||
|
target_include_directories(${TRGT} PUBLIC $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
|
||||||
|
|
||||||
|
# Компоновка с библиотекой из внешнего проекта
|
||||||
|
target_link_libraries(${TRGT} ${CMAKE_BINARY_DIR}/lib/libcmlib-example.a)
|
||||||
----
|
----
|
||||||
|
|
||||||
[source,cmake]
|
|
||||||
----
|
|
||||||
# Добавление каталога, в который устанавливаются заголовочные файлы от внешнего
|
|
||||||
# проекта cmext, к списку путей для поиска заголовочных файлов
|
|
||||||
target_include_directories(${current_target} PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include/cmext>)
|
|
||||||
----
|
|
||||||
|
|
||||||
[source,cmake]
|
Для проверки работоспособности в файле `src/cmlib-example/main.cpp` нужно
|
||||||
----
|
вызвать функцию `cmlib_example_init` из библиотеки, предоставляемой внешним
|
||||||
# Библиотека из внешнего проекта cmext
|
|
||||||
target_link_libraries(${current_target} ${CMAKE_BINARY_DIR}/lib/libcmext.a)
|
|
||||||
----
|
|
||||||
|
|
||||||
Для проверки работоспособности в файле `cmex/src/cmex/main.cpp` нужно
|
|
||||||
вызвать функцию `cmext_init` из библиотеки, предоставляемой внешним
|
|
||||||
проектом. Например, можно заменить его содержимое на:
|
проектом. Например, можно заменить его содержимое на:
|
||||||
|
|
||||||
[source,cpp]
|
[source,cpp]
|
||||||
----
|
----
|
||||||
#include "compiler_features.hpp"
|
#include <cmlib-example/init.hpp>
|
||||||
#include "cmlib_config.hpp"
|
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cmext/cmext.hpp>
|
|
||||||
|
|
||||||
#include "cmex.hpp"
|
int main(int argc, char* argv[])
|
||||||
|
|
||||||
QTextStream& qStdOut()
|
|
||||||
{
|
{
|
||||||
static QTextStream ts(stdout);
|
auto s = cmlib_example_init( argc );
|
||||||
return ts;
|
std::cout << s << std::endl;
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
return ( s );
|
||||||
// Значение из compiler_features.hpp
|
|
||||||
qStdOut() << QObject::tr("Compiler version: ") << CMEX_COMPILER_VERSION_MAJOR << endl;
|
|
||||||
// Значение из cmlib_config.hpp
|
|
||||||
qStdOut() << QObject::tr("Project version: ") << CMEX_VERSION_STR << endl;
|
|
||||||
// Значение из cmlib_config.hpp
|
|
||||||
qStdOut() << QObject::tr("Build type: ") << BUILD_TYPE << endl;
|
|
||||||
// Функция из внутренней библиотеки
|
|
||||||
qStdOut() << QObject::tr("libcmex function call: ") << cmex_init(4) << endl;
|
|
||||||
// Функция из внешней библиотеки
|
|
||||||
qStdOut() << QObject::tr("libcmext function call: ") << cmext_init(9) << endl;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
|
ПИШУ ЗДЕСЬ!!!
|
||||||
|
|
||||||
|
|
||||||
== Qt5
|
== Qt5
|
||||||
|
|
||||||
Для поиска необходимых компонентов Qt5 нужно в файл `cmex/CMakeLists.txt`
|
Для поиска необходимых компонентов Qt5 нужно в файл `cmex/CMakeLists.txt`
|
||||||
@ -742,11 +705,11 @@ find_package(Qt5 COMPONENTS Core Network Gui Widgets DBus Concurrent Sql REQUIRE
|
|||||||
[source,cmake]
|
[source,cmake]
|
||||||
----
|
----
|
||||||
# Qt5
|
# Qt5
|
||||||
qt_translation(TARGET ${current_target} TS_DIR ${CMAKE_SOURCE_DIR}/l10n LANGUAGES ru_RU)
|
qt_translation(TARGET ${TRGT} TS_DIR ${CMAKE_SOURCE_DIR}/l10n LANGUAGES ru_RU)
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS})
|
target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS})
|
||||||
target_compile_options(${current_target} PUBLIC "${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
|
target_compile_options(${TRGT} PUBLIC "${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
|
||||||
|
|
||||||
target_link_libraries(${current_target} Qt5::Core)
|
target_link_libraries(${TRGT} Qt5::Core)
|
||||||
----
|
----
|
||||||
|
|
||||||
Для проверки работоспособности подключения Qt5 файл
|
Для проверки работоспособности подключения Qt5 файл
|
||||||
@ -925,12 +888,12 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
[source,cmake]
|
[source,cmake]
|
||||||
----
|
----
|
||||||
set(current_target_sources
|
set(TRGT_sources
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/my_main_window.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/my_main_window.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
set(current_target_uis
|
set(TRGT_uis
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/my_main_window.ui
|
${CMAKE_CURRENT_SOURCE_DIR}/my_main_window.ui
|
||||||
)
|
)
|
||||||
----
|
----
|
||||||
@ -938,7 +901,7 @@ set(current_target_uis
|
|||||||
[source,cmake]
|
[source,cmake]
|
||||||
----
|
----
|
||||||
# Цель для создания исполняемого файла
|
# Цель для создания исполняемого файла
|
||||||
add_executable(${current_target} ${current_target_sources} ${current_target_uis})
|
add_executable(${TRGT} ${TRGT_sources} ${TRGT_uis})
|
||||||
----
|
----
|
||||||
|
|
||||||
и добавить строки для подключения графических библиотек Qt5 и
|
и добавить строки для подключения графических библиотек Qt5 и
|
||||||
@ -946,10 +909,10 @@ add_executable(${current_target} ${current_target_sources} ${current_target_uis}
|
|||||||
|
|
||||||
[source,cmake]
|
[source,cmake]
|
||||||
----
|
----
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${Qt5Gui_INCLUDE_DIRS})
|
target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Gui_INCLUDE_DIRS})
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${Qt5Widgets_INCLUDE_DIRS})
|
target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Widgets_INCLUDE_DIRS})
|
||||||
target_link_libraries(${current_target} Qt5::Gui)
|
target_link_libraries(${TRGT} Qt5::Gui)
|
||||||
target_link_libraries(${current_target} Qt5::Widgets)
|
target_link_libraries(${TRGT} Qt5::Widgets)
|
||||||
----
|
----
|
||||||
|
|
||||||
Во время сборки проекта в файл переводов `cmex/l10n/cmex_app_ru_RU.ts`
|
Во время сборки проекта в файл переводов `cmex/l10n/cmex_app_ru_RU.ts`
|
||||||
|
Loading…
x
Reference in New Issue
Block a user