Cmake, как использовать окна

Обновлено: 21.11.2024

CMake – это инструмент для определения и управления сборками кода, в основном для C++.

CMake — ​​это кроссплатформенный инструмент. идея состоит в том, чтобы иметь единое определение того, как строится проект, что преобразуется в конкретные определения сборки для любой поддерживаемой платформы.

Это достигается путем сопряжения с различными системами сборки для конкретных платформ; CMake — это промежуточный шаг, который генерирует входные данные сборки для разных конкретных платформ. В Linux CMake генерирует файлы Makefile; в Windows он может создавать проекты Visual Studio и т. д.

Поведение сборки определяется в файлах CMakeLists.txt — по одному в каждом каталоге исходного кода. Файл CMakeLists каждого каталога определяет, что система сборки должна делать в этом конкретном каталоге. Он также определяет, какие подкаталоги должен обрабатывать CMake.

Обычные действия включают:

  • Создайте библиотеку или исполняемый файл из некоторых исходных файлов в этом каталоге.
  • Добавьте путь к файлу в include-path, используемый во время сборки.
  • Определите переменные, которые система сборки будет использовать в этом каталоге и в его подкаталогах.
  • Создайте файл на основе конкретной конфигурации сборки.
  • Найдите библиотеку, которая находится где-нибудь в исходном дереве.

Окончательные файлы CMakeLists могут быть очень четкими и простыми, поскольку каждый из них имеет очень ограниченный объем. Каждый обрабатывает только ту часть сборки, которая присутствует в текущем каталоге.

Официальные ресурсы по CMake см. в документации и руководстве по CMake.

Версии

"Hello World" как библиотека

В этом примере показано, как развернуть программу "Hello World" в виде библиотеки и связать ее с другими целями.

Изменяем CMakeLists.txt на

и, выполнив те же действия, мы получим тот же результат.

"Hello World" с несколькими исходными файлами

Сначала мы можем указать каталоги файлов заголовков с помощью include_directories() , затем нам нужно указать соответствующие исходные файлы целевого исполняемого файла с помощью add_executable() и убедиться, что в исходных файлах есть ровно одна функция main() .

Ниже приведен простой пример. Предполагается, что все файлы размещены в каталоге PROJECT_SOURCE_DIR .

main.cpp

foo.h

foo.cpp

CMakeLists.txt

Мы можем следовать той же процедуре, что и в приведенном выше примере, чтобы построить наш проект. Затем выполняющееся приложение будет печатать

Установка CMake

Перейдите на страницу загрузки CMake и получите двоичный файл для вашей операционной системы, например Windows, Linux или Mac OS X. В Windows дважды щелкните двоичный файл для установки. В Linux запустите двоичный файл из терминала.

В Linux вы также можете установить пакеты из диспетчера пакетов дистрибутива. В Ubuntu 16.04 вы можете установить командную строку и графическое приложение с помощью:

В FreeBSD вы можете установить командную строку и графическое приложение на основе Qt с помощью:

В Mac OSX, если вы используете один из менеджеров пакетов, доступных для установки вашего программного обеспечения, наиболее известными из которых являются MacPorts (MacPorts) и Homebrew (Homebrew), вы также можете установить CMake через один из них. Например, в случае MacPorts введите следующее

установит CMake, а если вы используете диспетчер пакетов Homebrew, вы наберете

После того как вы установили CMake, вы можете легко проверить это, выполнив следующие действия

Вы должны увидеть что-то похожее на следующее

Простой проект "Hello World"

Поскольку исходный файл C++ main.cpp определяет функцию main(), сопутствующий файл CMakeLists.txt (со следующим содержимым) будет указывать CMake на создание соответствующих инструкций по сборке для текущей системы. и компилятор C++ по умолчанию.

CMakeLists.txt

cmake_minimum_required(VERSION 2.4) устанавливает минимальную версию CMake, необходимую для оценки текущего скрипта.

Проект

(hello_world) запускает новый проект CMake. Это вызовет большую часть внутренней логики CMake, особенно обнаружение компилятора C и C++ по умолчанию.

С помощью add_executable(app main.cpp) создается целевое приложение сборки, которое вызывает настроенный компилятор с некоторыми флагами по умолчанию для текущих настроек, чтобы скомпилировать исполняемое приложение из заданного исходного файла main.cpp .

Командная строка (In-Source-Build, не рекомендуется)

cmake . выполняет обнаружение компилятора, оценивает CMakeLists.txt в заданном файле . каталог и создает среду сборки в текущем рабочем каталоге.

Команда cmake --build . команда является абстракцией для необходимого вызова сборки/выполнения.

Командная строка (вне источника, рекомендуется)

Чтобы защитить исходный код от любых артефактов сборки, вам следует выполнять сборки "вне исходного кода".

Или CMake также может абстрагировать основные команды оболочки вашей платформы от приведенного выше примера:

Переключение между типами сборки, например. отлаживать и выпускать

CMake знает несколько типов сборки, которые обычно влияют на параметры компилятора и компоновщика по умолчанию (например, создаваемую отладочную информацию) или на альтернативные пути кода.

По умолчанию CMake может обрабатывать следующие типы сборки:

  • Отладка. Обычно это классическая отладочная сборка, включающая отладочную информацию, без оптимизации и т. д.
  • Релиз. Обычная сборка релиза без отладочной информации и с полной оптимизацией.
  • RelWithDebInfo:: То же, что и Release, но с отладочной информацией.
  • MinSizeRel: специальная сборка Release, оптимизированная по размеру.

Как обрабатываются конфигурации, зависит от используемого генератора.

Некоторые генераторы (например, Visual Studio) поддерживают несколько конфигураций. CMake сгенерирует все конфигурации сразу, и вы можете выбрать из IDE или с помощью --config CONFIG (с cmake --build ), какую конфигурацию вы хотите создать. Для этих генераторов CMake сделает все возможное, чтобы создать структуру каталогов сборки, чтобы файлы из разных конфигураций не наступали друг на друга.

Генераторы, которые поддерживают только одну конфигурацию (например, Unix Makefiles), работают иначе. Здесь текущая активная конфигурация определяется значением переменной CMake CMAKE_BUILD_TYPE .

Например, чтобы выбрать другой тип сборки, можно ввести следующие команды командной строки:

Сценарию CMake следует избегать установки самого CMAKE_BUILD_TYPE, так как обычно считается, что за это отвечает пользователь.

Для генераторов с одной конфигурацией переключение конфигурации требует повторного запуска CMake. Последующая сборка, скорее всего, перезапишет объектные файлы, созданные предыдущей конфигурацией.

примерно 5 дней подряд я пытался настроить на своем компьютере среду C++ для программирования с такими библиотеками, как sdl,glm,opengl. для нас важно иметь возможность запускать его на машинах unix на презентациях, поэтому я работаю с cmake. я наконец заставил его работать с cmake-gui, я даже не буду пытаться больше ни с какой IDE.

я указал свой проект папки и место для сборки двоичных файлов, я получил папку "CMakeFiles" вместе с txt "CMakeCache", файл CMAKE "cmake_install.cmake" и файл "Makefile". также в моей папке «CMakeFiles» есть много других папок, таких как «CMakeTmp», «CompilerIdC», «CompilerIdCXX и т. д.», и в обеих папках «Compiler *» есть .exe, который не работает! так где же мой разыскиваемый исполняемый файл?

Я открыл cmd, перешел в свою папку и попытался написать "сделать", как и положено по инструкции. увы, получилось не очень. надеюсь, вы поделитесь своей мудростью и поможете такому новичку, как я!

так что же именно нужно для компиляции проектов, содержащих дополнительные библиотеки? пока у меня есть компилятор Mingw32, последний CMake и использование cmake-gui для извлечения двоичных файлов, но я получаю make-файлы.

РЕДАКТИРОВАТЬ: хррм. только у меня такие проблемы? я могу добавить, что я внимательно изучил около 10 руководств, и 90% шагов похожи (при компиляции с помощью VS, который я пробовал сначала):

  • Загрузить последнюю версию SDL
  • Создайте папку, например, C:\SDL с двумя папками, include и lib
  • Скопируйте библиотеки и включения из загруженного SDL
  • Создайте новый проект VS, откройте каталоги VC++ и добавьте папку lib/incl, например, в C:\SDL
  • Добавить в компоновщик SDL.lib и SDLmain.lib (я убедился, что они связаны, здесь нет проблем)
  • Измените систему на WINDOWS (необязательно, если вам не нужны два окна)
  • Добавлено включение в "дополнительные библиотеки".
  • Поместите файл SDL.dll (который я получил из последней версии SDL) в папку C:\windows\system32(64SysWoW), а также в файл проекта.

Итак, то, что я на самом деле ищу, это заставить CMake работать, поскольку он успешно генерирует и строит исходники (с графическим интерфейсом), и я чувствую, что приближаюсь. Нужно ли мне добавлять какие-либо дополнительные библиотеки из sdl в мой компилятор mingw32 и/или cmake?

После того как CMake будет установлен в вашей системе, использовать его для создания проекта несложно. Мы рассмотрим процесс для Windows, а затем для UNIX.

Запуск CMake для Windows/Microsoft Visual C++ (MSVC)

Запустите cmake-gui.exe, который должен находиться в меню "Пуск" в разделе "Программные файлы", также может быть ярлык на рабочем столе или, если вы собирали из исходного кода, он будет находиться в каталоге сборки. Появится графический интерфейс, аналогичный показанному ниже. Две верхние записи — это каталоги с исходным кодом и двоичными файлами. Они позволяют указать, где находится исходный код того, что вы хотите скомпилировать, и куда следует поместить полученные двоичные файлы. Вы должны сначала установить эти два значения. Если указанный вами двоичный каталог не существует, он будет создан для вас.

Запуск CMake в Unix

На большинстве платформ Unix, если поддерживается библиотека curses, cmake создаст исполняемый файл с именем ccmake. Этот интерфейс представляет собой текстовое приложение на основе терминала, очень похожее на графический интерфейс Windows. Чтобы запустить ccmake, измените каталоги на каталог, в который вы хотите поместить двоичные файлы. Это может быть тот же каталог, что и исходный код для того, что мы называем сборкой на месте (двоичные файлы находятся в том же месте, что и исходный код), или это может быть новый каталог, который вы создаете. Затем запустите ccmake либо без аргументов для сборки на месте, либо с указанием пути к исходному каталогу в командной строке. Это запустит текстовый интерфейс, который выглядит примерно так:

Если вы нажмете клавишу «c», проект будет настроен. Вы должны использовать это при изменении значений в кеше. Чтобы изменить значения, используйте клавиши со стрелками для выбора записей кэша и клавишу ввода для их редактирования. Логические значения будут переключаться с помощью клавиши ввода. После того, как вы установили все значения по своему усмотрению, вы можете нажать клавишу «G», чтобы сгенерировать make-файлы и выйти. Вы также можете нажать «h», чтобы получить помощь, «q», чтобы выйти, и «t», чтобы переключить просмотр расширенных записей кэша.

Два примера использования CMake на платформе Unix относятся к проекту hello world под названием Hello. В первом примере выполняется сборка на месте, т. е. двоичные файлы помещаются в тот же каталог, что и исходный код.

Во втором примере выполняется неуместная сборка, т. е. исходный код, библиотеки и исполняемые файлы создаются в каталоге, отдельном от каталога(ов) исходного кода.

Запуск CMake из командной строки

Из командной строки cmake можно запустить как интерактивный сеанс вопросов и ответов или как неинтерактивную программу. Для запуска в интерактивном режиме просто передайте cmake опцию «-i». Это приведет к тому, что cmake попросит вас ввести значение для каждого значения в файле кеша для проекта. Процесс останавливается, когда больше не остается вопросов.

Использование CMake для создания проекта в неинтерактивном режиме — это простой процесс, если в проекте не так много параметров. Для более крупных проектов, таких как VTK, рекомендуется использовать ccmake, cmake -i или CMakeSetup. Это связано с тем, что при изменении параметров в файле CMakeCache.txt cmake может добавлять новые записи в этот файл. Может быть трудно понять, когда остановить запуск cmake, отредактировать цикл файла кеша без помощи интерфейса.

Для сборки с помощью cmake измените каталог туда, куда вы хотите поместить двоичные файлы. Для сборки на месте вы затем запустите cmake, и он создаст файл CMakeCache.txt, содержащий параметры сборки, которые вы можете настроить с помощью любого текстового редактора. Для сборок не на месте процесс такой же, за исключением того, что вы запускаете cmake и указываете путь к исходному коду в качестве аргумента. После того, как вы отредактировали файл CMakeCache.txt, повторно запустите cmake, повторяйте этот процесс, пока не будете довольны настройками кеша. Тип make и ваш проект должен скомпилироваться. Некоторые проекты также будут иметь цели установки, поэтому вы можете ввести make install, чтобы установить их.

При запуске cmake из командной строки можно указать параметры командной строки для cmake, которые будут устанавливать значения в кэше. Это делается с помощью синтаксиса -DVARIABLE:TYPE=VALUE в командной строке. Это полезно для неинтерактивных ночных тестовых сборок.

Что такое кеш CMake?

Кэш лучше всего рассматривать как файл конфигурации. Действительно, пользователи Unix могут рассматривать кеш как эквивалент набора флагов, переданных команде configure. При первом запуске CMake создает файл CMakeCache.txt. Этот файл содержит такие вещи, как существование и расположение собственной библиотеки JPEG. Записи добавляются в ответ на определенные команды CMake (например, FIND_LIBRARY), поскольку они обрабатываются в любом месте файлов CMakeLists в любом месте исходного дерева. После запуска CMake и создания файла CMakeCache.txt его можно редактировать. Графический интерфейс CMake позволит вам легко редактировать параметры или редактировать файл напрямую. Основной причиной редактирования кеша может быть указание CMake местоположения собственной библиотеки, такой как JPEG, или предотвращение использования собственной библиотеки и использование версии библиотеки в исходном дереве.

CMake не изменит существующую запись в самом файле кеша. Если ваши файлы CMakeLists.txt значительно изменятся, вам потребуется удалить соответствующие записи из файла кеша. Если вы еще не редактировали файл кеша вручную, вы можете просто удалить его перед повторным запуском CMake.

Почему для некоторых проектов мне приходится редактировать кэш несколько раз?
Некоторые проекты очень сложны, и установка одного значения в кеше может привести к появлению новых параметров при следующем построении кеша. Например, VTK поддерживает использование MPI для выполнения распределенных вычислений.Это требует, чтобы процесс сборки определял, где находятся библиотеки MPI и файлы заголовков, и позволял пользователю корректировать их значения. Но MPI доступен, только если в VTK сначала включена другая опция VTK_USE_PARALLEL. Поэтому, чтобы избежать путаницы у людей, которые не знают, что такое MPI, мы скрываем эти параметры до тех пор, пока не будет включен VTK_USE_PARALLEL. Таким образом, CMake показывает параметр VTK_USE_PARALLEL в области кеша, если пользователь включает его и перестраивает кеш, появляются новые параметры для MPI, которые они затем могут установить. Правило состоит в том, чтобы продолжать создавать кеш, пока он не изменится. Для большинства проектов это будет только один раз. Для некоторых сложных это будет дважды.

Производимые полезные цели

В дополнение к целям и правилам для создания объектных файлов, библиотек и исполняемых файлов проекта CMake создает некоторые дополнительные цели и правила. Для проектов Visual Studio автоматически создаются два служебных проекта: ALL_BUILD и RUN_TESTS.

В этом разделе объясняется, как создать приложение с помощью ZED SDK на платформах Windows.

Настройка проекта

Мы создадим простое учебное приложение Hello ZED, используя ZED SDK и CMake. CMake — это кроссплатформенный инструмент для создания проектов. Он предоставляет простой способ создания файлов проекта, которые можно использовать в выбранной вами среде компилятора. Например, сценарий CMake может создавать файлы проектов и решений Visual Studio.

  • Загрузите и установите последнюю версию ZED SDK.
  • Загрузите образец кода примеров ZED, доступный на нашей странице GitHub. Вы также можете найти на GitHub дополнительные плагины и примеры кодов.
  • Откройте папку Tutorials/Tutorial - Hello ZED, чтобы найти код, который мы будем создавать. В каталоге должны находиться следующие файлы:
    • CMakeLists.txt
    • main.cpp
    • Readme.md

    Создание для Windows

    В Windows для создания приложения с помощью ZED SDK требуется Cmake (3.5.0+) или более поздней версии и Visual Studio 2015 или более поздней версии. Приложения должны быть скомпилированы для 64-разрядной версии.

    Примечание. При установке Visual Studio обязательно выберите параметр Visual C++.

    • Откройте cmake-gui.
    • В разделе «Где находится исходный код» введите путь к папке проекта, в которой находится файл CMakeLists.txt. Здесь мы создали папку проекта «ZED_Tutorial_1» в Документах.
    • В поле «Где собирать двоичные файлы» введите предыдущий путь и добавьте: /build.
    • Нажмите [Настроить].

    • В диалоговом окне вас спросят, может ли CMake создать папку «сборка». Скажи да.
    • В другом диалоговом окне вам будет предложено указать генератор для вашего проекта. Выберите Visual Studio в Win64 и нажмите [Готово].

    CMAKE должен определить целевую платформу как x64, в новой версии она установлена ​​по умолчанию, если нет, вы можете установить ее.

    Читайте также: