qt начальные параметры cmake
Обзор API
Статьи о Qt
Примеры
Содержание
Настройка проекта CMake
CMake это альтернатива qmake для автоматизации генерации файла Makefile. Он контролирует процесс компиляции приложения используя простые конфигурационные файлы, называемые файлами CMakeLists.txt. CMake генерирует Makefile и рабочие пространства, которые могут быть использованы в окружении компилятора по вашему выбору.
С версии Qt Creator 1.1 доступна поддержка проектов CMake. Qt Creator 1.3 поддерживает набор инструментов от Microsoft если версия cmake хотя бы 2.8.
Настройка переменной PATH для CMake
Вы можете настроить путь для исполняемого файла CMake в Инструменты > Параметры. > Проекты > CMake.
Замечание: Прежде чем вы откроете проект CMake, необходимо изменить переменную окружения PATH так, чтобы она включала каталоги bin mingw и Qt Creator в SDK.
Например, если у вас Qt Creator SDK установлена на диске C, используйте следующую команду для установки переменных окружения в командной строке:
Затем, запустите Qt Creator набрав:
Открытие проектов CMake
Для открытия проекта CMake:
Мастер проведёт вас через оставшиеся шаги процесса.
Замечание: Если проект CMake не имеет места для сборки, Qt Creator позволит вам указать каталог, в котором проект будет собран (теневая сборка).
Снимок экрана ниже показывает как вы можете указать аргументы командной строки для CMake в вашем проекте.
Обычно нет необходимости передавать какие-либо аргументы для уже собранного проекта, так как CMake кэширует эту информацию.
Сборка проектов CMake
Qt Creator собирает проекты CMake запуская make, mingw32-make или nmake в зависимости от вашей платформы. Ошибки и предупреждения сборки обрабатываются и отображаются в панели Вывод сборки.
По умолчанию Qt Creator собирает все цели. Вы можете указать какие цели надо собирать в режиме Проекты в Настройки сборки.
Qt Creator поддерживает множественные настройки сборки. Каталог сборки может быть изменён после первоначального импорта.
Запуск проектов CMake
Qt Creator автоматически добавляет Настройки запуска для всех целей, указанных в файле проекта CMake.
Известные проекты для текущей версии могут быть найдены здесь.
Добавление внешних библиотек в проект CMake
Qt Creator может поддерживать дополнение кода и подсветку синтаксиса для внешних библиотек как если бы они были бы частью текущего проекта или библиотеки Qt.
Qt Creator определяет внешние библиотеки с помощью макроса FIND_PACKAGE(). Некоторые библиотеки поставляются с CMake. Вы можете найти их в подкаталоге Modules в каталоге установки CMake.
Замечание: Если вы предоставляете собственные библиотеки, вам также необходимо предоставить собственный файл FindFoo.cmake. Для получения дополнительной информации смотрите CMake FAQ.
Дополнение кода и подсветка синтаксиса будут работать как только ваш проект успешно соберется и слинкуется с внешней библиотекой.
Обзор API
Статьи о Qt
Примеры
Содержание
Настройка проекта CMake
CMake это альтернатива qmake для автоматизации генерации файла Makefile. Он контролирует процесс компиляции приложения используя простые конфигурационные файлы, называемые файлами CMakeLists.txt. CMake генерирует Makefile и рабочие пространства, которые могут быть использованы в окружении компилятора по вашему выбору.
С версии Qt Creator 1.1 доступна поддержка проектов CMake. Qt Creator 1.3 поддерживает набор инструментов от Microsoft если версия cmake хотя бы 2.8.
Настройка переменной PATH для CMake
Вы можете настроить путь для исполняемого файла CMake в Инструменты > Параметры. > Проекты > CMake.
Замечание: Прежде чем вы откроете проект CMake, необходимо изменить переменную окружения PATH так, чтобы она включала каталоги bin mingw и Qt Creator в SDK.
Например, если у вас Qt Creator SDK установлена на диске C, используйте следующую команду для установки переменных окружения в командной строке:
Затем, запустите Qt Creator набрав:
Открытие проектов CMake
Для открытия проекта CMake:
Мастер проведёт вас через оставшиеся шаги процесса.
Замечание: Если проект CMake не имеет места для сборки, Qt Creator позволит вам указать каталог, в котором проект будет собран (теневая сборка).
Снимок экрана ниже показывает как вы можете указать аргументы командной строки для CMake в вашем проекте.
Обычно нет необходимости передавать какие-либо аргументы для уже собранного проекта, так как CMake кэширует эту информацию.
Сборка проектов CMake
Qt Creator собирает проекты CMake запуская make, mingw32-make или nmake в зависимости от вашей платформы. Ошибки и предупреждения сборки обрабатываются и отображаются в панели Вывод сборки.
По умолчанию Qt Creator собирает все цели. Вы можете указать какие цели надо собирать в режиме Проекты в Настройки сборки.
Qt Creator поддерживает множественные настройки сборки. Каталог сборки может быть изменён после первоначального импорта.
Запуск проектов CMake
Qt Creator автоматически добавляет Настройки запуска для всех целей, указанных в файле проекта CMake.
Известные проблемы для текущей версии могут быть найдены
Добавление внешних библиотек в проект CMake
Qt Creator может поддерживать дополнение кода и подсветку синтаксиса для внешних библиотек как если бы они были бы частью текущего проекта или библиотеки Qt.
Qt Creator определяет внешние библиотеки с помощью макроса FIND_PACKAGE(). Некоторые библиотеки поставляются с CMake. Вы можете найти их в подкаталоге Modules в каталоге установки CMake.
Замечание: Если вы предоставляете собственные библиотеки, вам также необходимо предоставить собственный файл FindFoo.cmake. Для получения дополнительной информации смотрите CMake FAQ.
Дополнение кода и подсветка синтаксиса будут работать как только ваш проект успешно соберется и слинкуется с внешней библиотекой.
Qt Documentation
Contents
CMake automates the configuration of build systems. It controls the software compilation process by using simple configuration files, called CMakeLists.txt files. CMake generates native build configurations and workspaces that you can use in the compiler environment of your choice.
You can use CMake from Qt Creator to build applications for the desktop and Android devices. You can also build single files to test your changes.
CMake documentation is installed in Qt help file format (.qch) when you install CMake. It is automatically registered by Qt Creator, and you can view it in the Help mode.
Qt Creator automatically runs CMake to refresh project information when you edit a CMakeLists.txt configuration file in a project. Project information is also automatically refreshed when you build the project.
The File System section in the sidebar Projects view displays information from the file system. Qt Creator cannot determine whether the files are part of the project. For example, header files that Qt Creator finds in the project directories but that are not mentioned in the CMakeLists.txt files are listed here.
Adding CMake Tools
Qt Creator requires CMake’s file-based API. Please make sure to use CMake version 3.14, or later.
To view and specify settings for CMake:
To add a path to a CMake executable that Qt Creator does not detect automatically, and to specify settings for it, select Add. To make changes to automatically detected installations, select Clone.
Qt Creator uses the default CMake if it does not have enough information to choose the CMake to use. To set the selected CMake executable as the default, select Make Default.
To remove the selected CMake executable from the list, select Remove.
Select the Kits tab to add the CMake tool to a build and run kit. The kit also specifies the CMake generator that is used for producing project files for Qt Creator and the initial configuration parameters:
For more information, see Adding Kits.
Editing CMake Configuration Files
To open a CMakeLists.txt file for editing, right-click it in the Projects view and select Open With > CMake Editor.
You can also use the cmo filter in the locator to open the CMakeLists.txt file for the current run configuration in the editor. This is the same build target as when you select Build > Build for Run Configuration.
The following features are supported:
Adding External Libraries to CMake Projects
Through external libraries, Qt Creator can support code completion and syntax highlighting as if they were part of the current project or the Qt library.
Qt Creator detects the external libraries using the find_package() macro. Some libraries come with the CMake installation. You can find those in the Modules directory of your CMake installation. For more information, see cmake-packages(7).
Syntax completion and highlighting work once your project successfully builds and links against the external library.
Related Topics
В© 2021 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.
Использование CMake с Qt 5
Поиск и подключение библиотек Qt 5
Одно из главных изменений при использовании CMake в Qt 5 — это результат увеличенной модульности в самом Qt.
В Qt 4, поиск осуществлялся следующим образом:
find_package (Qt4 COMPONENTS QTCORE QTGUI)
В Qt 5, можно найти все модули, которые Вы хотите использовать, отдельными командами:
find_package (Qt5Widgets)
find_package (Qt5Declarative)
В будущем, возможно, будет способ найти определенные модули в одной команде, но сейчас, в Qt 5, такого вида поиск работать не будет:
find_package(Qt5 COMPONENTS Widgets Declarative)
Сборка проектов Qt 5
Вкупе с новыми возможностями в CMake, как например автоматический вызов moc, простая система сборки CMake с использованием Qt 5 будет выглядеть примерно так:
Навстречу более современному использованию CMake
Функция CMake qt5_use_modules инкапсулирует всю установку, необходимую для использования Qt. Она может использоваться с несколькими аргументами сразу для краткости, например:
qt5_use_modules(hello_world Widgets Declarative)
Для qmake это эквивалентно следующему:
TARGET = hello_world
QT += widgets declarative
Все свойства находятся в области видимости конкретной используемой целевой функции, вместо того, чтобы быть в области видимости CMakeLists. Например, в этом фрагменте:
Детали реализации
Поиск Qt 5 происходит несколько иначе. Кроме возможности найти зависимости, используя Find-файл, CMake также в состоянии считывает файлы, обеспечивающие зависимости для определения местоположения библиотек и заголовочных файлов. Такие файлы называются файлами конфигурации, и обычно они генерируются самим CMake.
Сборка Qt 5 так же сгенерирует эти конфигурационные файлы CMake, но при этом не появятся зависимости от CMake.
Основное преимущество этого — то, что функции (и модули) Qt, которые могут использоваться с CMake, не будут зависеть от используемой версии CMake. Все модули Qt Essentials и Qt Addons создадут свой собственный файл конфигурации CMake, и функции, предоставляемые модулями, будут сразу доступны через макросы и переменные CMake.
Введение в CMake
CMake — кроcсплатформенная утилита для автоматической сборки программы из исходного кода. При этом сама CMake непосредственно сборкой не занимается, а представляет из себя front-end. В качестве back-end`a могут выступать различные версии make и Ninja. Так же CMake позволяет создавать проекты для CodeBlocks, Eclipse, KDevelop3, MS VC++ и Xcode. Стоит отметить, что большинство проектов создаются не нативных, а всё с теми же back-end`ами.
Для того что бы собрать проект средствами CMake, необходимо в корне дерева исходников разместить файл CMakeLists.txt, хранящий правила и цели сборки, и произвести несколько простых шагов.
Разберёмся на примерах.
Пример 1. Hello, World:
Синтаксис CMake похож на синтаксис bash, всё что после символа «#» является комментарием и обрабатываться программой не будет. CMake позволяет не засорять дерево исходных кодов временными файлами — очень просто и без лишних телодвижений сборка производится «Out-of-Source».
Создадим пустую директорию для временных файлов и перейдём туда.
$ mkdir tmp
fshp@panica-desktop:
$ cd tmp/
fshp@panica-desktop:
/cmake/example_1/
…
— Build files have been written to: /home/fshp/tmp
fshp@panica-desktop:
/tmp$ ls
CMakeCache.txt CMakeFiles cmake_install.cmake Makefile
fshp@panica-desktop:
/tmp$ make
Scanning dependencies of target main
[100%] Building CXX object CMakeFiles/main.dir/main.cpp.o
Linking CXX executable main
[100%] Built target main
fshp@panica-desktop:
Итак, наша программа собралась.
Папку tmp можно очищать\удалять без риска поломать исходники. Если CMakeLists.txt был изменен, то вызов make автоматически запустит cmake. Если исходники были перемещены, то нужно очистить временную директорию и запустить cmake вручную.
Пример 2. Библиотеки:
Переменные могут хранить списки значений, разделённых пробелами\табуляциями\переносами:
Оба варианта правильные
Что бы получить значение переменной ипользуем конструкцию:
Итак, эта версия нашего проекта включает в себя одну статическую библиотеку, собираемую из исходников. Если заменить «STATIC» на «SHARED», то получим библиотеку динамическую. Если тип библиотеки не указать, по умолчанию она соберётся как статическая.
При линковке указываются все необходимые библиотеки:
Как и при ручной компиляции, имена библиотек указываются без стандартного префикса «lib».
Итак, сборка библиотек с CMake не вызывает проблем, при этом тип библиотеки статическая\динамическая меняется лишь одним параметром.
Пример 3. Подпроекты:
В файле подпроекта ничего нового для вас нет. А вот в основном файле новые команды:
main.cpp мы не меняли, а foo.h перенесли. Команда указывает компилятору, где искать заголовочные файлы. Может быть вызвана несколько раз. Хидеры будут искаться во всех указаных директориях.
Указываем директорию с подпроектом, который будет собран как самостоятельный.
Вывод: проекты на CMake можно объединять в довольно сложные иерархические структуры, причем каждый подпроект в реальности является самостоятельным проектом, который в свою очередь может сам состоять из подпроектов. Это позволяет легко разбить вашу программу на необходимое количество отдельных модулей. Примером такого подхода может служить KDE.
Пример 4. Поиск библиотек:
CMake обладает достаточно развитыми средствами поиска установленых библиотек, правда они не встроеные, а реализованы в виде отдельных модулей. В стандартной поставке довольно много модулей, но некоторые проекты (например Ogre) поставляют свои. Они позволяют системе автоматически определить наличие необходимых для линковки проекта библиотек.
На debian модули располагаются в /usr/share/cmake-2.8/Modules/ (у вас версия может отличаться). За поиск библиотек отвечают модули, называющиеся FindNAME.cmake, где NAME — имя библиотеки.
Думаю, смысл должен быть понятен. Первый и второй блок — поиск библиотеки. Если в системе её нет, выведется сообщение об ошибке и завершается выполнение cmake. Третий блок похож, только он ищет не целый пакет библиотек, а лишь необходимый компонент. Каждый такой автоматизированый поиск определяет после выполнения как минимум 3 переменные:
SDL_FOUND, LIBXML2_FOUND, Boost_FOUND — признак присутствия бибилиотеки;
SDL_LIBRARY, LIBXML2_LIBRARIES, Boost_LIBRARIES — имена библиотек для линковки;
SDL_INCLUDE_DIR, LIBXML2_INCLUDE_DIR, Boost_INCLUDE_DIRS — пути к заголовочным файлам.
Если с первыми более или менее понятно, то вторые и третьи мне доставили много хлопот — половина имеет имена в единственном числе, половина — во множественном. Но оказалось, это легко отследить. В каждом модуле вначале есть коментарии, там описаны определяемые переменные. Посмотрите, например, /usr/share/cmake-2.8/Modules/FindLibXml2.cmake
Как видите, CMake способен сам определить наличие и местоположение необходимых библиотек и заголовочных файлов. В принципе, это должна уметь любая система автоматической сборки, иначе смысл в ней?
Пример 5. Внешние библиотеки и объектные файлы:
Если вы пишите для «дяди», а злой «дядя» любит самописные библиотеки и делиться исходниками не желает, поэтому присылает готовую библиотеку, то вы по адресу.
Объектные файлы в CMake стоят на ряду с исходниками — достаточно включить объектник в список файлов для компиляции.
С библиотеками потуже. Как известно, статическая библиотека это не что иное, как ar-архив, внутри которого лежат обычные объектники, никак не связаные между собой. Вы, наверное, уже догадались, как я поступал сначала. Да, просто потрошил библиотеку. Но потом был найден способ поэлегантнее:
Слово «IMPORTED», указывает, что библиотека берётся извне.
В CMake каждая цель имеет параметры, а set_property позволяет их изменять.
Линкуется такая библиотека стандартно:
Для динамических библиотек все аналогично, только тип «SHARED», расширение — «.so».
К сожалению, поддержка несистемных библиотек реализована немного костыльно. Возможно, я просто не знаю правильного варианта, поэтому буду рад, если «ткнете мордочкой». С другой стороны это не навороченый экзоскелет с системой жизнеобеспечения, а простейший костыль из двух строк.
Генераторы:
Заключение:
Это не перевод мануала, а результат использования CMake в одном коммерческом проекте. Буду рад, если статья поможет хотя бы одному человеку — на русском языке подобной документации довольно мало.