CMAKE құрастыру жүйесі арқылы IDE CLion ішінде Qt ішінде "Hello, World!!!" жазамыз. Жобаның CLion IDE-де әзірленгеніне баса назар аударылды, себебі жобамен жұмыс істеу үшін CMAKE -мен жұмыс істеуге кішкене түзетулер енгізу қажет.
Нәтиже келесі қолданба болып табылады:
IDE CLion орнату
Жобаны жасағаннан кейін оны Qt кітапханасымен жұмыс істеу үшін конфигурациялау керек, CMAKE_PREFIX_PATH аргументі арқылы осы кітапханаға жолды орнату керек.
Мұны істеу үшін IDE параметрлеріне өтіңіз. Файл -> Параметрлер -> Құрастыру, орындау, орналастыру -> CMake
Әрі қарай CMake Options арқылы CMAKE_PREFIX_PATH арқылы біз CMAKE үшін Qt кітапханаларына жолды көрсетеміз. Кітапханаларға толық жол келесідей болуы мүмкін:
/home/user/Qt/5.9.1/gcc_64/lib/cmake
Бүкіл префикс жазбасы келесідей болады:
-DCMAKE_PREFIX_PATH=/home/user/Qt/5.9.1/gcc_64/lib/cmake
Параметрлерде бұл терезе келесідей болады.
CMakeLists.txt
CMakeLists.txt ішінде әдепкі бойынша қосылған ақпаратқа қосымша, find_package және target_link_libraries. функцияларын пайдалану арқылы Qt кітапханаларының іздеуін және қосылуын қосу қажет болады.
cmake_minimum_required(VERSION 3.8) project(HelloWorld) set(CMAKE_CXX_STANDARD 17) # включаем поиск библиотек с использованием find_package() # через REQUIRED указываем, что библиотеки обязательны find_package(Qt5Core REQUIRED) find_package(Qt5Gui REQUIRED) find_package(Qt5Widgets REQUIRED) set(SOURCE_FILES main.cpp) add_executable(HelloWorld ${SOURCE_FILES}) # указываем, какие библиотеки необходимо подключить target_link_libraries(${PROJECT_NAME} Qt5::Core) target_link_libraries(${PROJECT_NAME} Qt5::Gui) target_link_libraries(${PROJECT_NAME} Qt5::Widgets)
main.cpp
Әйтпесе, бірінші HelloWorld жазу Qt Creator астында ұқсас даму болады.
#include <QtWidgets/QApplication> #include <QtWidgets/QWidget> #include <QtWidgets/QGridLayout> #include <QtWidgets/QLabel> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget widget; widget.resize(640, 480); widget.setWindowTitle("Hello, world!!!"); QGridLayout *gridLayout = new QGridLayout(&widget); QLabel * label = new QLabel("Hello, world!!!"); label->setAlignment(Qt::AlignVCenter | Qt::AlignHCenter); gridLayout->addWidget(label); widget.show(); return app.exec(); }
CMake құрастыру жүйесін пайдалана отырып, Qt Creator астында әзірлеу кезінде жобаға файлдарды қосқанда Qt Creator оларды CMakeLists.txt ішіне жазбайтыны ұнамады, яғни файлдар жасалған, бірақ жобаға қосылмаған. . Сондай-ақ оның бірқатар шағын қолайсыздықтары бар, дегенмен CLion IDE өте нақты Qt функциясымен жұмыс істеуге әлі де ыңғайлы емес, кем дегенде Qt макросын автоматты түрде аяқтауды, осы макростар үшін жетіспейтін сынып мүшелерін (айнымалылар мен әдістерді) автоматты түрде жасауды алыңыз. , дизайнермен жұмыс және т.б. .
При том подходе в разработке что ведет JetBrains, скоро CLion обгонит QtCreator. Даже сейчас он в некоторых местах по функционалу уже обходит QtCreator(работа с VCS уже превосходит в удобстве). Так что будем посмотреть)
Спасибо! Очень помогло в освоении CMake.
При компиляции примера Qt Creator выдаёт следующую ошибку:
"Для сборки необходимо, чтобы была задана утилита CMake. Задайте её в настройках комплекта."
При этом комплект настроен как надо (в моём понимании): при наведении курсора на комплект показывается перечень настроек комплекта во всплывающей подсказке. В т.ч. и про CMake: "CMake Системная CMake в %путь_до_cmake.exe%".
Windows 7 Корпоративная Service Pack 1
Qt Creator 4.6.2
А что у вас в настройка во вкладке CMake, есть что-нибудь? У меня например по умолчанию ничего нет под Windows.
Хотя при наведении на комплект кое-что есть в тултипе, однако - это переменные в Path, но не сами пути.
А где найти вкладку CMake?
Вот здесь
Вот.
Ну теоретически он должен быть установлен в комплекте. Покажите информацию о комплекте.
Если CMake Tool пустой, то нужно установить, если нет, то пересборка проекта, шаманство с переменными окружения и т.д. Где-то получается, что не находит адекватно CMake. К сожалению под Qt Creator я проекты на CMake не собирал, только CLion использую для этого.
Вот.
Главное, под linux-версией всё сразу взлетело...
Под linux как правило проще, там всё по свои каталогам и полочкам разложено сразу.
Думается мне, что проблема все-таки где-то в путях переменных...
В переменной PATH путь к CMake был указан как G:\soft\CMake\bin, в реальности же каталог называется Cmake.
Причём после изменения в переменной PATH всё заработало, а в Qt Creator путь остался по-прежнему с CMake.
Значит всё-таки в переменных окружения была проблема. Полагаю, что Qt Creator берёт информацию сначала из переменных PATH, либо записывает её из своего конфига, а потом берёт уже из PATH при запуске сборки. По какой-то причине у вас сменилось название каталога, Qt Creator не обнаружил изменения и не изменил переменные окружения. И по прежнему пытался тянуть из несуществующего каталога cmake.
Хорошо, что нашли, где ошибка была.
Падает с ошибкой -1073741515 (0xC0000135). Не знаете, что можно с этим сделать?
Подобное описание ошибки на самом деле совсем ничего не говорит, может быть что угодно. Падает сразу? То есть даже не запустившись? Или всё-таки запускается и при каких-то действиях падает?
Странно, что по запросу 0xC0000135 гугл выдаёт уйму страниц, в которых описываются ситуации с неисправной ОС или HDD.
Возможно, просто что-то неправильно написали или библиотеки не подключились. Либо у вас действительно битый HDD.
Даже не запускается.
main.cpp у меня точно такой же, как в статье. CMakeLists.txt пришлось немного подправить (прикрепил ниже), т.к. не находились некоторые файлы.
Погуглив, я тоже находил ответы, что проблема может быть в том, что не подключаются какие-то библиотеки. Но это довольно странно, т.к. путь к CMake я указал так же, как описывается в статье(-DCMAKE_PREFIX_PATH=/C:/Qt/5.12.1/mingw73_64/lib/cmake).
Кстати, в обычном Qt Creator этот же код отлично работает.
Смотрите, если вы используете глобально для проекта -DCMAKE_PREFIX_PATH= то вам не надо уже указывать вот эти строки
set(Qt5Core_DIR "C:/Qt/5.12.1/mingw73_64/lib/cmake/Qt5Core")
set(Qt5Gui_DIR "C:/Qt/5.12.1/mingw73_64/lib/cmake/Qt5Gui")
set(Qt5Widgets_DIR "C:/Qt/5.12.1/mingw73_64/lib/cmake/Qt5Widgets")
потому что вы уже указываете где искать. И он уже за счет find_package(Qt5Core REQUIRED) будет знать что ему за cmake нужен.
Второе, не используйте после создания таргета имя проекта, используйте только ${PROJECT_NAME}. Это так, совет, чтоыб ваш конфиг был читаемый.
Вот атк выглядит мой проектник, посмотрите его.
И главнео соблюдайте порядок, что вы делаете, обьявляете или создаете. Это важно.
Я указал данные строки, т.к. без них у меня вылетала следующая ошибка:
By not providing "FindQt5Core.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Qt5Core", but CMake did not find one.
Could not find a package configuration file provided by "Qt5Core" with any
of the following names:
Qt5CoreConfig.cmake
qt5core-config.cmake
Понятия не имею, почему он изначально не видел эти файлы.
Насчёт ${PROJECT_NAME} учту, спасибо.
Иногда CMake приходится перезапускать начисто, не обновляет кэш