CMake projects in Visual Studio — Quick start

Автор: | 30.07.2021

Tags: CMake  CMakeLists.txt  Visual Studio

Введение 
Компиляция и запуск CMake проекта «Hello world» в командной строке Windows
Запуск CMake проекта из Visual Studio
Компиляция и запуск CMake проекта в Visual Studio
Полезные ссылки

Введение

Проект CMake стартовал в 1999 году, когда компании-разработчику Kitware было поручено разработать набор новых инструментов для настройки, сборки, тестирования и развертывания проектов на разных платформах.

Если у вас есть программа (код C/C ++), предназначенная для нескольких платформ (Windows, Linux и macOS), вам определенно не захочется тратить время на настройку и поддержку всех сред сборки. CMake — это инструмент, который обеспечивает универсальный способ создания файлов проекта, чтобы их можно было использовать в среде компилятора по вашему выбору. CMake — это кроссплатформенный инструмент, предназначенный для создания, тестирования и упаковки программного обеспечения. Например, с помощью CMake можно создавать файлы проекта и решения для Visual Studio. Некоторые общие операции и настройки проекта Visual Studio и их сопоставление с CMake перечислены в виде обзора.

CMake — это генератор сборки, который предоставляет мощный предметно-ориентированный язык (англ. domain-specific language, DSL) для описания функций, которые должна реализовать система сборки. В системе сборки CMake «правила» или «настройки проекта» сборки определены в текстовых файлах, называемых CMakeLists.txt.

Проект на основе CMake состоит из исходных файлов и одного или нескольких файлов CMakeLists.txt по всей иерархии каталогов. Эти файлы содержат необходимую информацию для компиляции приложения, такую, ​​как расположение исходных файлов, имя исполняемого файла, используемые библиотеки и т. д. Цель программиста — максимально четко выразить эти идеи с помощью языка CMake. Язык CMake — это просто язык программирования, в нем есть функции, циклы, условия и т. д.

Ранее разработка и запуск CMake проекта реализовывались только с командной строки.  Visual Studio 2017 является первой версией, которая предоставляет встроенную поддержку для обработки проектов CMake. Это значительно упрощает разработку CMake проектов для VS — без необходимости использовать для этого командную строку.

Компиляция и запуск CMake проекта «Hello world» в командной строки Windows

Создаю CMake проект d:\my\project из 2-х файлов (текстовка файлов из Hello world with CMake):

Через кнопку ПУСК в Windows запускаю командную строку Windows

Меняю диск, перехожу в каталог project и создаю в нем каталог сборки  build (см. Список команд Windows )

Результат

Перехожу в директорию build и запускаю команду cmake с двумя точками

The .. is the path to the parent directory (Where CMake expects a CMakeLists.txt)

Результат выполнения команд

Директория  build    после этого заполняется сгенерированными файлами и папками. В папке Debug находится файл для исполнения hello_world.exe:

Запускаю файл hello_world.exe с командной строки. В соответствии с программным кодом из файла  main.cpp выводится сообщение Hello World.

Запуск скомпилированного CMake проекта «Hello world» из Visual Studio

Использую для тестирования скомпилированный в командной строке CMake проект «Hello world».  Чтобы открыть код CMake проекта в Visual Studio 2017 , выбираются кнопки меню  File > Open > Folder .

Запускаю проект (F5).  Окно с сообщением «Hello World» проскакивает (не была предусмотрена задержка окна, например, через ожидание ввода переменной cin >> i ). Меняю код в файле main.cpp на следующий:

#include <iostream>
using namespace std; 
int main()
{
 int i;
 cout << "Integer?:";
 cin >> i;
 cout << " Square of number:" << i * i << "\n";
 cin >> i;
 return 0;

Запускаю проект после изменений (F5).

Когда вы вносите изменения в исходники или даже создаете, переименовываете или удаляете исходные файлы из своих проектов CMake, вам не нужно беспокоиться о ручном повторном запуске CMake для регенерации решения VS или проектов. При любом из этих действий Visual Studio автоматически перекомпилирует CMake проект и запускает последнюю версию модификации C++ файлов.

Компиляция и запуск CMake проекта в Visual Studio

Использую для тестирования CMake проект cmakedemo (его можно скачать из  A CMake Tutorial for Visual C++ Developers). В этом проекте код C++ сгруппирован в папках со статической библиотекой libutil, динамической библиотекой sharedmod  и собственно приложением theapp. Скрипты CMakeLists.txt созданы в каждой из подпапок src , а также в корне.

Чтобы открыть код CMake проекта в Visual Studio 2017, достаточно выбрать в меню File > Open > Folder. Пытаюсь после этого запустить приложение обычным для VS способом (F5). Получаю сообщение:

Система не находит exeшник для запуска приложения.

В проекте, сразу после его открытия (через File > Open > Folder) автоматически генерируется папка bin

В папке bin находится файл для запуска приложения (theapp.exe), а также скомпилированные библиотеки

Выполняю click на файле  theapp.exe, окно проскакивает. Добавляю код для задержки окна (выделен красным цветом).

#include <iostream>
#include "pisym.h"
int main()
{
 std::cout << "Hello world from The App!" << std::endl;
 piMonteCarloSimulation pisym{};
 std::cout << "Symulated value of PI:" << std::endl;
 for (int i = 0; i < 10; ++i)
 std::cout << " " << pisym.aproxPi() << std::endl;
 int k;
 std::cin >> k;
 return 0;
}

Еще раз отмечу замечательную особенность работы с CMake проектами в VS. После модификации исходных файлов проект автоматически перекомпилируется.

Повторяю запуск через click на файле  theapp.exe, получаю результат:

Как решить проблему запуска CMake приложения  непосредственно из VC? Очень просто:

После открытия CMake проекта (через кнопки меню File > Open > Folder) VS перестраивается для работы с CMake проектом. Дополнительно в основном меню появляются кнопки CMake и Build. Через кнопку CMake в меню VS можно выполнить как отладочные запуски приложения так и ряд настроек проекта.

Более подробно с особенностями работы с CMake проектами в  Visual Studio можно ознакомиться в публикации   A CMake Tutorial for Visual C++ Developers, а также в публикациях по ссылкам, которые приводятся ниже.

Полезные ссылки: