LINUX.ORG.RU

Qt5 + CMake

 ,


1

2

Кто работает с данной связкой? Сборку я победил, даже сделал так, чтобы можно было как с Qt4 собирать, так и с Qt5. Проблема появилась с install частью. Для Qt4 я юзал следующий код:

FOREACH(LANG ${LANGUAGES})
    INSTALL(FILES ${TRANSLATIONS_DIR}/${TARGET}_${LANG}.qm DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/)
    INSTALL(FILES ${QT_TRANSLATIONS_DIR}/qt_${LANG}.qm DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/)
ENDFOREACH(LANG ${LANGUAGES})

IF(WIN32)
    INSTALL(FILES ${QT_BINARY_DIR}/QtCore4.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
    INSTALL(FILES ${QT_BINARY_DIR}/QtNetwork4.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
    INSTALL(FILES ${QT_BINARY_DIR}/QtXml4.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
    INSTALL(FILES ${QT_BINARY_DIR}/QtSql4.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)

    INSTALL(FILES ${QT_QJPEG_PLUGIN_RELEASE} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/plugins/imageformats)
    INSTALL(FILES ${QT_QGIF_PLUGIN_RELEASE} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/plugins/imageformats)

    INSTALL(FILES ${CMAKE_BINARY_DIR}/3rdparty/QtSolutions/src/qtservice/libQtService.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)

    FIND_PATH (MINGW_PATH "libstdc++-6.dll")
    INSTALL(FILES ${MINGW_PATH}/libgcc_s_dw2-1.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
    INSTALL(FILES ${MINGW_PATH}/libstdc++-6.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
    #INSTALL(FILES ${MINGW_PATH}/mingwm10.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
    INSTALL(FILES ${MINGW_PATH}/libwinpthread-1.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
ENDIF(WIN32)

Вот только для Qt5 QT_TRANSLATIONS_DIR, QT_BINARY_DIR и остальные данные пусты. Как теперь их доставать?

Ответ на: комментарий от panter_dsd

Угу. Тут список библиотек для Qt 5.1. Список библиотек для Qt 5.2 немного другой.

bhfq ★★★★★ ()

Сборку я победил, даже сделал так, чтобы можно было как с Qt4 собирать, так и с Qt5.

А рецептом не поделишься? Как раз думаю начинать перебираться на Qt5.

unfo ★★★★★ ()
Ответ на: комментарий от unfo

Определил проперти:

OPTION(USE_QT5 "Using Qt5" OFF)

И дальше что-то типа такого.

IF(USE_QT5)
    FIND_PACKAGE(Qt5Core)
ELSE(USE_QT5)
    FIND_PACKAGE(Qt4 REQUIRED QtCore)
    INCLUDE(${QT_USE_FILE})
    ADD_DEFINITIONS(${QT_DEFINITIONS})
ENDIF(USE_QT5)
..............
IF(USE_QT5)
    QT5_USE_MODULES(${TARGET} Core)
ENDIF(USE_QT5)
panter_dsd ★★★★ ()

А я перешел на qbs. До этого использовал CMake и qmake. Несмотря на то, что qbs ещё сырой, мне не хочется пользоваться больше ничем другим.

А СMake имеет такой низкий порог вхождения и такой интуитивный лаконичный синтаксис, что подходит для Тру-хардкор-BDSM линукс-программиста.

pathfinder ★★★★ ()
Ответ на: комментарий от pathfinder

Тут главное привыкнуть. А к qbs я отношусь как к очередному велосипеду. Если что-то из него выйдет, то, может быть, когда-нибудь перейду на него.

panter_dsd ★★★★ ()
Ответ на: комментарий от punya

Qt подразумевает под собой кроссплатформенное по, так что, винфобы идут лесом.

panter_dsd ★★★★ ()
Ответ на: комментарий от pathfinder

А СMake имеет такой низкий порог вхождения и такой интуитивный лаконичный синтаксис, что подходит для Тру-хардкор-BDSM линукс-программиста.

Купил пару лет назад книжку «Mastering CMake» на амазоне, никаких проблем не имею :)

unfo ★★★★★ ()
Ответ на: комментарий от unfo

Хотел спросить, как человека, не имеющего проблем:

1. Как ты включаешь precompiled_headers для g++?

2. Как у тебя добавляются новые файлы в проект?

pathfinder ★★★★ ()
Ответ на: комментарий от panter_dsd

А в чем сложности? Открываешь CMakeLists.txt и записываешь туда имя файла.

То есть все файлы исходников прописываешь вручную. Я понял.

pathfinder ★★★★ ()
Ответ на: комментарий от panter_dsd

А что такого-то в этом? Или совсем обленились с этими всякими IDE?

Да, именно лень. Каждый раз, когда делаешь рефакторинг кода и делаешь кучу перемещений, переименовываний, расщеплений, объединений с некоторым множеством файлов, то вся эта работа превращается в боль для глаз. Мне не понравилось, я написал специальную программу, которая обновляла список файлов в CMakeList.txt исходя из содержимого папки с исходниками. Почему они не сделали такого «искаропки»?

pathfinder ★★★★ ()
Последнее исправление: pathfinder (всего исправлений: 1 )
Ответ на: комментарий от pathfinder

Дык, сам можешь запилить. Есть поиск файлов по маске - его и заюзай.

panter_dsd ★★★★ ()
Ответ на: комментарий от pathfinder

1. precompiled headers не пользую

2. Файлы проекта описываю, например, так:

set(SUBDIRS core plugins storage ui)

foreach(SUBDIR ${SUBDIRS})
      include (${SUBDIR}/CMakeLists.txt)
      foreach (FILE ${FILES_CPP})
        set (ALL_FILES_CPP ${ALL_FILES_CPP} ${SUBDIR}/${FILE})
      endforeach (FILE)

      foreach (FILE ${FILES_H})
        set (ALL_FILES_H ${ALL_FILES_H} ${SUBDIR}/${FILE})
      endforeach (FILE)
endforeach(SUBDIR)

А вложенные директории содержат CMakeLists.txt подобного содержания:

set( FILES_CPP
    mainform.cpp
    pluginviewer.cpp
    logviewer.cpp
    toolbar.cpp
    menubar.cpp
    statusbar.cpp
    codeeditor.cpp
    helpviewer.cpp )

set( FILES_H
    mainform.h
    pluginviewer.h
    logviewer.h
    toolbar.h 
    menubar.h
    statusbar.h
    codeeditor.h
    helpviewer.h )
unfo ★★★★★ ()
Ответ на: комментарий от crowbar

Каждый раз вижу, и каждый раз охреневаю.

Это же не обязательно, но будет предупреждение, если описание не совпадает. Пару раз помогало.

DarkEld3r ★★★★★ ()
Ответ на: комментарий от pathfinder

То есть все файлы исходников прописываешь вручную. Я понял.

Можно не вручную, а через «file(GLOB ...». Но это как бы не рекомендованный способ.

Приходится иметь дело с обоими вариантами, особой разницы не вижу.

DarkEld3r ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.