diff --git a/wiki/Prog/Development/CMake управление проектом.adoc b/wiki/Prog/Development/CMake управление проектом.adoc index c51bccb..aa4e83f 100644 --- a/wiki/Prog/Development/CMake управление проектом.adoc +++ b/wiki/Prog/Development/CMake управление проектом.adoc @@ -868,6 +868,24 @@ int main( int argc, char** argv ) git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-app-qt5-gui ---- +В каталоге `files/data` создать файл описания включаемых ресурсов `icon.qrc`: + +[source,xml] +---- + + + icon.png + + +---- + +и загрузить файл иконки: + +[source,sh] +---- +wget https://git.246060.ru/f1x1t/cmlib-example-app-qt5-gui/raw/branch/master/files/data/icon.png +---- + Для графического приложения нужно создать файл описания интерфейса `src/cmlib-example/test_window.ui`: @@ -1001,6 +1019,85 @@ find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED) ---- +В файле `src/cmake-example/CMakeLists.txt` добавить новые файлы к списку +файлов, используемых для компиляции: + +[source,cmake] +---- +### +# Списки файлов проекта +### +# Исходные коды +set(TRGT_cpp + ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_window.cpp) + +# Заголовочные файлы, для которых необходима обработка препроцессором moc +# (содержат класс, унаследованный от QObject, использующий сигналы и/или слоты) +set(TRGT_moc_hpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_window.hpp) + +# Другие заголовочные файлы +set(TRGT_hpp) + +# Файлы с описанием графического интерфейса для Qt +set(TRGT_ui + ${CMAKE_CURRENT_SOURCE_DIR}/test_window.ui) + +# Файлы описания ресурсов, включаемых в исполняемый файл +set(TRGT_qrc + ${CMAKE_SOURCE_DIR}/files/data/icon.qrc) +### +# Конец списков файлов +### +---- + +Для обеспечения работы препроцессоров Qt необходимо создать правила +преобразования файлов: + +[source,cmake] +---- +# Правило для автоматической генерации препроцессором uic +qt5_wrap_ui(TRGT_ui_h ${TRGT_ui}) + +# Правило для автоматической генерации препроцессором moc +qt5_wrap_cpp(TRGT_moc_cpp ${TRGT_moc_hpp}) + +# Правила для создания файла ресурсов с вложенными файлами переводов +qt5_translation( + TRGT_qrc_cpp + OUTPUT_DIR ${CMAKE_SOURCE_DIR}/l10n BASE_NAME ${TRGT} + SOURCES ${TRGT_cpp} ${TRGT_ui} LANGUAGES ru_RU) + +# Правило для автоматической генерации препроцессором qrc +# (обязательно после вызова функции qt5_translation, если она есть, +# так как она добавляет свои файлы к списку ресурсов) +qt5_add_resources(TRTG_qrc_cpp ${TRGT_qrc}) +---- + +Цель для создания исполняемого файла нужно изменить таким образом, +чтобы она зависела от файлов с исходными кодами и файлов, генерируемых +препроцессорами: + +[source,cmake] +---- +add_executable(${TRGT} ${TRGT_ui_h} ${TRGT_moc_cpp} ${TRGT_qrc_cpp} ${TRGT_cpp}) +---- + +Подключение заголовочных файлов и библиотек Qt должно выглядеть так: + +[source,cmake] +---- +# Qt5: подключение заголовочных файлов +target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS}) +target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Gui_INCLUDE_DIRS}) +target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Widgets_INCLUDE_DIRS}) + +# Qt5: подключение библиотек +target_link_libraries(${TRGT} Qt5::Core Qt5::Gui Qt5::Widgets) +---- + + @@ -1011,37 +1108,6 @@ find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED) -В файле `src/cmake-example/CMakeLists.txt` добавить новые файлы к списку -файлов, используемых для компиляции: - -[source,cmake] ----- -set(TRGT_sources - ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/my_main_window.cpp - ) - -set(TRGT_uis - ${CMAKE_CURRENT_SOURCE_DIR}/my_main_window.ui - ) ----- - -[source,cmake] ----- -# Цель для создания исполняемого файла -add_executable(${TRGT} ${TRGT_sources} ${TRGT_uis}) ----- - -и добавить строки для подключения графических библиотек Qt5 и -соответствующих им заголовочных файлов: - -[source,cmake] ----- -target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Gui_INCLUDE_DIRS}) -target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Widgets_INCLUDE_DIRS}) -target_link_libraries(${TRGT} Qt5::Gui) -target_link_libraries(${TRGT} Qt5::Widgets) ----- Во время сборки проекта в файл переводов `cmex/l10n/cmex_app_ru_RU.ts` будут добавлены новые строки, их нужно перевести с помощью `linguist` и