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_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})
|
||||
|
||||
# Добавление к пути поиска заголовочных файлов
|
||||
@ -454,7 +454,7 @@ if(BUILD_SHARED_LIBS)
|
||||
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
|
||||
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_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})
|
||||
|
||||
# Добавление к пути поиска заголовочных файлов
|
||||
@ -617,10 +617,6 @@ git submodule add https://git.246060.ru/f1x1t/cmlib-example-library thirdparty/c
|
||||
git submodule update --init --recursive
|
||||
----
|
||||
|
||||
Вызовы этих функций нужно сделать до функций `add_subdirectories`, чтобы
|
||||
в подключенных подкаталогах можно было использовать цель `cmext` для
|
||||
определения зависимостей.
|
||||
|
||||
В файл `CMakeLists.txt`, находящийся в корневом каталоге проекта, перед функциями
|
||||
`add_subdirectories` нужно добавить:
|
||||
|
||||
@ -689,77 +685,162 @@ int main(int argc, char* argv[])
|
||||
|
||||
=== 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`,
|
||||
находящемся в корневом каталоге проект, перед вызовом функции
|
||||
находящемся в корневом каталоге проекта, перед вызовом функции
|
||||
`cmlib_config_hpp_generate()` добавить строку:
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
find_package(Qt5 COMPONENTS Core Network Gui Widgets Concurrent Sql REQUIRED)
|
||||
# Используемые компоненты Qt5
|
||||
find_package(Qt5 COMPONENTS Core REQUIRED)
|
||||
----
|
||||
|
||||
Библиотека CMLib автоматически подключает вызов препроцессора `moc` и
|
||||
компилятора ресурсов `rcc`, если цель использует модуль `Core`, и
|
||||
вызывает компилятор файлов описания интерфейса, если цель использует
|
||||
модуль `Widgets`.
|
||||
|
||||
== Консольное приложение
|
||||
|
||||
В файл `cmex/src/cmex/CMakeLists.txt` добавить строки:
|
||||
В файл `src/cmlib-example/CMakeLists.txt` перед вызовом функции
|
||||
`add_executable` добавить строки:
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
# Qt5
|
||||
qt_translation(TARGET ${TRGT} TS_DIR ${CMAKE_SOURCE_DIR}/l10n LANGUAGES ru_RU)
|
||||
target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS})
|
||||
target_compile_options(${TRGT} PUBLIC "${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
|
||||
# Правила для создания файла ресурсов с вложенными файлами переводов
|
||||
qt5_translation(
|
||||
TRGT_qrc
|
||||
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 файл
|
||||
`cmex/src/cmex/main.cpp` нужно заменить на:
|
||||
`src/cmlib-example/main.cpp` нужно заменить на:
|
||||
|
||||
[source,cpp]
|
||||
----
|
||||
#include "compiler_features.hpp"
|
||||
#include "cmlib_config.hpp"
|
||||
#include "cmlib_private_config.hpp"
|
||||
|
||||
#include <QtCore>
|
||||
#include <iostream>
|
||||
#include <cmext/cmext.hpp>
|
||||
#include <myx/qt/translators.hpp>
|
||||
|
||||
#include "cmex.hpp"
|
||||
#include <QCoreApplication>
|
||||
#include <QDebug>
|
||||
|
||||
QTextStream& qStdOut()
|
||||
namespace MQ = myx::qt;
|
||||
|
||||
int main( int argc, char** argv )
|
||||
{
|
||||
static QTextStream ts(stdout);
|
||||
return ts;
|
||||
}
|
||||
QCoreApplication app( argc, argv );
|
||||
MQ::QTranslatorsList tl;
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
QCoreApplication app(argc, argv);
|
||||
QTranslator translator;
|
||||
qDebug() << QObject::tr( "No" );
|
||||
MQ::append_translators( tl, QStringLiteral( CMLIB_PROJECT_NAME ) );
|
||||
qDebug() << QObject::tr( "Yes" );
|
||||
|
||||
if (translator.load(QLocale(), "cmex_app", QLatin1String("_"), QLatin1String(":/qm")))
|
||||
{
|
||||
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;
|
||||
return( 0 );
|
||||
}
|
||||
----
|
||||
|
||||
|
||||
|
||||
|
||||
После сборки проекта в каталоге `cmex/l10n` появится файл
|
||||
`cmex_app_ru_RU.ts`, в котором нужно отредактировать переводы с помощью
|
||||
программы `linguist`. После сохранения переводов проект нужно
|
||||
|
Loading…
Reference in New Issue
Block a user