update
This commit is contained in:
parent
c22fcdfdd8
commit
c89fed2c07
@ -428,13 +428,13 @@ add_dependencies(cmlib-example create_auxilary_symlinks)
|
|||||||
set(TRGT cmlib-example)
|
set(TRGT cmlib-example)
|
||||||
|
|
||||||
# Список файлов исходных текстов
|
# Список файлов исходных текстов
|
||||||
set(TRGT_sources ${CMAKE_CURRENT_SOURCE_DIR}/init.cpp)
|
set(TRGT_cpp ${CMAKE_CURRENT_SOURCE_DIR}/init.cpp)
|
||||||
|
|
||||||
# Список заголовочных файлов (используется для установки)
|
# Список заголовочных файлов (используется для установки)
|
||||||
set(TRGT_headers ${CMAKE_CURRENT_SOURCE_DIR}/init.hpp)
|
set(TRGT_hpp ${CMAKE_CURRENT_SOURCE_DIR}/init.hpp)
|
||||||
|
|
||||||
# Функция для создания цели, результатом которой будет сборка библиотеки
|
# Функция для создания цели, результатом которой будет сборка библиотеки
|
||||||
add_common_library(TARGET ${TRGT} SOURCES ${TRGT_sources})
|
add_common_library(${TRGT} SOURCES ${TRGT_cpp})
|
||||||
common_target_properties(${TRGT})
|
common_target_properties(${TRGT})
|
||||||
|
|
||||||
# Добавление к пути поиска заголовочных файлов
|
# Добавление к пути поиска заголовочных файлов
|
||||||
@ -454,7 +454,7 @@ if(BUILD_SHARED_LIBS)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Установка заголовочных файлов
|
# Установка заголовочных файлов
|
||||||
install(FILES ${TRGT_headers} COMPONENT DEV DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${TRGT})
|
install(FILES ${TRGT_hpp} COMPONENT DEV DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${TRGT})
|
||||||
|
|
||||||
# Установка файла для pkg-config
|
# Установка файла для pkg-config
|
||||||
install(FILES ${CMAKE_BINARY_DIR}/${TRGT}.pc COMPONENT DEV DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
install(FILES ${CMAKE_BINARY_DIR}/${TRGT}.pc COMPONENT DEV DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||||
@ -539,10 +539,10 @@ add_dependencies(cmlib-example create_auxilary_symlinks)
|
|||||||
set(TRGT cmlib-example)
|
set(TRGT cmlib-example)
|
||||||
|
|
||||||
# Список файлов исходных текстов
|
# Список файлов исходных текстов
|
||||||
set(TRGT_sources ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp)
|
set(TRGT_cpp ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp)
|
||||||
|
|
||||||
# Функция для создания цели, результатом которой будет сборка приложения
|
# Функция для создания цели, результатом которой будет сборка приложения
|
||||||
add_executable(${TRGT} ${TRGT_sources})
|
add_executable(${TRGT} ${TRGT_cpp})
|
||||||
common_target_properties(${TRGT})
|
common_target_properties(${TRGT})
|
||||||
|
|
||||||
# Добавление к пути поиска заголовочных файлов
|
# Добавление к пути поиска заголовочных файлов
|
||||||
@ -617,10 +617,6 @@ git submodule add https://git.246060.ru/f1x1t/cmlib-example-library thirdparty/c
|
|||||||
git submodule update --init --recursive
|
git submodule update --init --recursive
|
||||||
----
|
----
|
||||||
|
|
||||||
Вызовы этих функций нужно сделать до функций `add_subdirectories`, чтобы
|
|
||||||
в подключенных подкаталогах можно было использовать цель `cmext` для
|
|
||||||
определения зависимостей.
|
|
||||||
|
|
||||||
В файл `CMakeLists.txt`, находящийся в корневом каталоге проекта, перед функциями
|
В файл `CMakeLists.txt`, находящийся в корневом каталоге проекта, перед функциями
|
||||||
`add_subdirectories` нужно добавить:
|
`add_subdirectories` нужно добавить:
|
||||||
|
|
||||||
@ -689,77 +685,162 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
=== Qt5
|
=== Qt5
|
||||||
|
|
||||||
|
|
||||||
|
==== Консольное приложение и локализация
|
||||||
|
|
||||||
|
Пример консольного приложения на Qt5 с поддержкой локализации основан
|
||||||
|
на проекте <<base-app-project,базового приложения>> и библиотеке
|
||||||
|
https://git.246060.ru/f1x1t/myxlib[MyXLib].
|
||||||
|
Исходные тексты содержат комментарии, объясняющие назначение используемых функций.
|
||||||
|
Проект можно посмотреть https://git.246060.ru/f1x1t/cmlib-example-app-qt5-con[здесь]
|
||||||
|
или сделать его копию командой:
|
||||||
|
|
||||||
|
[source,sh]
|
||||||
|
----
|
||||||
|
git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-app-qt5-con
|
||||||
|
----
|
||||||
|
|
||||||
|
Для подключения проекта библиотеки https://git.246060.ru/f1x1t/myxlib[MyXLib] нужно выполнить:
|
||||||
|
|
||||||
|
[source,sh]
|
||||||
|
----
|
||||||
|
git submodule add https://git.246060.ru/f1x1t/myxlib thirdparty/myxlib
|
||||||
|
git submodule update --init --recursive
|
||||||
|
----
|
||||||
|
|
||||||
|
В файл `CMakeLists.txt`, находящийся в корневом каталоге проекта, перед функциями
|
||||||
|
`add_subdirectories` нужно добавить:
|
||||||
|
|
||||||
|
[source,cmake]
|
||||||
|
----
|
||||||
|
# Подключение внешних проектов
|
||||||
|
include(ExternalProject)
|
||||||
|
|
||||||
|
ExternalProject_Add(
|
||||||
|
myxlib
|
||||||
|
SOURCE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/myxlib
|
||||||
|
INSTALL_DIR ${CMAKE_BINARY_DIR}
|
||||||
|
DOWNLOAD_COMMAND ""
|
||||||
|
CONFIGURE_COMMAND
|
||||||
|
${CMAKE_COMMAND} -"G${CMAKE_GENERATOR}" -DCMAKE_BUILD_TYPE=Debug
|
||||||
|
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
||||||
|
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
|
||||||
|
-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} <SOURCE_DIR>
|
||||||
|
BUILD_COMMAND true)
|
||||||
|
----
|
||||||
|
|
||||||
|
В результате будет создана цель `myxlib`, являющаяся результатом сборки
|
||||||
|
подключённой библиотеки. Все функции `ExternalProject_Add` необходимо
|
||||||
|
располагать перед функциям `add_subdirectories`, чтобы в указанных подкаталогах
|
||||||
|
можно было использовать добавленные цели для определения зависимостей.
|
||||||
|
|
||||||
|
В файле `src/cmlib-example/CMakeLists.txt` после создания цели `${TRGT}` нужно
|
||||||
|
подключить внешний проект `myxlib`:
|
||||||
|
|
||||||
|
[source,cmake]
|
||||||
|
----
|
||||||
|
# Зависимость от библиотеки из внешнего проекта проекта
|
||||||
|
add_dependencies(${TRGT} myxlib)
|
||||||
|
|
||||||
|
# Добавление каталога, в который устанавливаются заголовочные файлы
|
||||||
|
# от внешнего проекта, к списку путей для поиска
|
||||||
|
target_include_directories(${TRGT} PUBLIC $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
|
||||||
|
|
||||||
|
# Компоновка с библиотеками из внешнего проекта
|
||||||
|
target_link_libraries(${TRGT} myx-qt myx-filesystem myx-base)
|
||||||
|
----
|
||||||
|
|
||||||
Для поиска необходимых компонентов Qt5 нужно в файле `CMakeLists.txt`,
|
Для поиска необходимых компонентов Qt5 нужно в файле `CMakeLists.txt`,
|
||||||
находящемся в корневом каталоге проект, перед вызовом функции
|
находящемся в корневом каталоге проекта, перед вызовом функции
|
||||||
`cmlib_config_hpp_generate()` добавить строку:
|
`cmlib_config_hpp_generate()` добавить строку:
|
||||||
|
|
||||||
[source,cmake]
|
[source,cmake]
|
||||||
----
|
----
|
||||||
find_package(Qt5 COMPONENTS Core Network Gui Widgets Concurrent Sql REQUIRED)
|
# Используемые компоненты Qt5
|
||||||
|
find_package(Qt5 COMPONENTS Core REQUIRED)
|
||||||
----
|
----
|
||||||
|
|
||||||
Библиотека CMLib автоматически подключает вызов препроцессора `moc` и
|
В файл `src/cmlib-example/CMakeLists.txt` перед вызовом функции
|
||||||
компилятора ресурсов `rcc`, если цель использует модуль `Core`, и
|
`add_executable` добавить строки:
|
||||||
вызывает компилятор файлов описания интерфейса, если цель использует
|
|
||||||
модуль `Widgets`.
|
|
||||||
|
|
||||||
== Консольное приложение
|
|
||||||
|
|
||||||
В файл `cmex/src/cmex/CMakeLists.txt` добавить строки:
|
|
||||||
|
|
||||||
[source,cmake]
|
[source,cmake]
|
||||||
----
|
----
|
||||||
# Qt5
|
# Правила для создания файла ресурсов с вложенными файлами переводов
|
||||||
qt_translation(TARGET ${TRGT} TS_DIR ${CMAKE_SOURCE_DIR}/l10n LANGUAGES ru_RU)
|
qt5_translation(
|
||||||
target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS})
|
TRGT_qrc
|
||||||
target_compile_options(${TRGT} PUBLIC "${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
|
OUTPUT_DIR ${CMAKE_SOURCE_DIR}/l10n BASE_NAME ${TRGT}
|
||||||
|
SOURCES ${TRGT_cpp} LANGUAGES ru_RU)
|
||||||
|
|
||||||
target_link_libraries(${TRGT} Qt5::Core)
|
# Путь поиска библиотек созданных при компиляции проекта,
|
||||||
|
# включая библиотеки из подключённых внешних проектов, например MyXLib
|
||||||
|
# Функция link_directories обязательно должна находиться перед
|
||||||
|
# функцией add_executable, иначе компоновка не может быть выполнена
|
||||||
|
link_directories(${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
|
||||||
----
|
----
|
||||||
|
|
||||||
|
В вызове `add_executable` подключить использование файла ресурсов
|
||||||
|
с переводами:
|
||||||
|
|
||||||
|
[source,cmake]
|
||||||
|
----
|
||||||
|
add_executable(${TRGT} ${TRGT_cpp} ${TRGT_qrc})
|
||||||
|
----
|
||||||
|
|
||||||
|
После чего добавить подключение Qt5 и MyXLib:
|
||||||
|
|
||||||
|
[source,cmake]
|
||||||
|
----
|
||||||
|
# Qt5: подключение заголовочных файлов
|
||||||
|
target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
# Qt5: подключение библиотек
|
||||||
|
target_link_libraries(${TRGT} Qt5::Core)
|
||||||
|
|
||||||
|
# Добавление к пути поиска заголовочных файлов
|
||||||
|
target_include_directories(${TRGT} SYSTEM PUBLIC ${Boost_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
# Зависимость от библиотеки из внешнего проекта проекта
|
||||||
|
add_dependencies(${TRGT} myxlib)
|
||||||
|
|
||||||
|
# Добавление каталога, в который устанавливаются заголовочные файлы
|
||||||
|
# от внешнего проекта, к списку путей для поиска
|
||||||
|
target_include_directories(${TRGT} PUBLIC $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
|
||||||
|
|
||||||
|
# Компоновка с библиотеками из внешнего проекта
|
||||||
|
target_link_libraries(${TRGT} myx-qt myx-filesystem myx-base)
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
Для проверки работоспособности подключения Qt5 файл
|
Для проверки работоспособности подключения Qt5 файл
|
||||||
`cmex/src/cmex/main.cpp` нужно заменить на:
|
`src/cmlib-example/main.cpp` нужно заменить на:
|
||||||
|
|
||||||
[source,cpp]
|
[source,cpp]
|
||||||
----
|
----
|
||||||
#include "compiler_features.hpp"
|
#include "cmlib_private_config.hpp"
|
||||||
#include "cmlib_config.hpp"
|
|
||||||
|
|
||||||
#include <QtCore>
|
#include <myx/qt/translators.hpp>
|
||||||
#include <iostream>
|
|
||||||
#include <cmext/cmext.hpp>
|
|
||||||
|
|
||||||
#include "cmex.hpp"
|
#include <QCoreApplication>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
QTextStream& qStdOut()
|
namespace MQ = myx::qt;
|
||||||
|
|
||||||
|
int main( int argc, char** argv )
|
||||||
{
|
{
|
||||||
static QTextStream ts(stdout);
|
QCoreApplication app( argc, argv );
|
||||||
return ts;
|
MQ::QTranslatorsList tl;
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
qDebug() << QObject::tr( "No" );
|
||||||
QCoreApplication app(argc, argv);
|
MQ::append_translators( tl, QStringLiteral( CMLIB_PROJECT_NAME ) );
|
||||||
QTranslator translator;
|
qDebug() << QObject::tr( "Yes" );
|
||||||
|
|
||||||
if (translator.load(QLocale(), "cmex_app", QLatin1String("_"), QLatin1String(":/qm")))
|
return( 0 );
|
||||||
{
|
|
||||||
app.installTranslator(&translator);
|
|
||||||
}
|
|
||||||
// Значение из 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;
|
|
||||||
}
|
}
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
После сборки проекта в каталоге `cmex/l10n` появится файл
|
После сборки проекта в каталоге `cmex/l10n` появится файл
|
||||||
`cmex_app_ru_RU.ts`, в котором нужно отредактировать переводы с помощью
|
`cmex_app_ru_RU.ts`, в котором нужно отредактировать переводы с помощью
|
||||||
программы `linguist`. После сохранения переводов проект нужно
|
программы `linguist`. После сохранения переводов проект нужно
|
||||||
|
Loading…
Reference in New Issue
Block a user