Как открыть cmake проект в visual studio

Обновлено: 07.07.2024

При использовании cmake для компиляции программ на C / C ++ в Windows вам сначала понадобится CMake, установите среду компиляции gcc / g ++, затем используйте VSCode и настройте CMakelist.txt.

Что такое CMake

Возможно, вы слышали о нескольких инструментах Make, таких как GNU Make, Qmake QT, MS nmake от Microsoft, BSD Make (pmake), Makepp и так далее. Эти инструменты Make следуют различным спецификациям и стандартам, и формат исполняемого ими файла Makefile сильно различается. Это создает серьезную проблему: если программное обеспечение хочет кросс-платформенное, оно должно гарантировать, что оно может быть скомпилировано на разных платформах. Если вы используете вышеупомянутый инструмент Make, вы должны написать Makefile для каждого стандарта, что будет сумасшедшей работой.

CMake - это инструмент, разработанный для решения вышеуказанной проблемы: сначала он позволяет разработчикам написать независимый от платформы файл CMakeList.txt для настройки всего процесса компиляции, а затем генерирует требуемый локализованный Makefile и файл проекта в соответствии с платформой целевого пользователя. Например, Unix Makefile или Windows Visual Project. Так что «Пиши один раз, беги везде». Очевидно, что CMake - более продвинутый инструмент настройки компиляции, чем приведенный выше. Некоторые известные проекты с открытым исходным кодом, использующие CMake в качестве системы архитектуры проектов, включают VTK, ITK, KDE, OpenCV, OSG и т. Д.

Обычно процесс генерации и компиляции Makefile с использованием CMake выглядит следующим образом:

  1. Написать файл конфигурации CMake CMakeLists.txt
  2. Выполните команду cmake PATH или ccmake PATH для генерации Makefile (разница между ccmake и cmake заключается в том, что первый предоставляет интерактивный интерфейс), где PATH - это каталог, в котором находится CMakeLists.txt.
  3. Используйте команду make для компиляции

готов

1. VSCode (следующие плагины должны быть установлены)

C/C++
C++ Intellisense
CMake
CMake tools
CMake Tools Helper

2. MinGW, руководство по установке [Портал】
3.CMake

Установить CMake

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

Его можно установить одним щелчком мыши. Не забудьте проверить, чтобы добавить cmake к переменным окружения во время процесса установки.

Проверить успешную установку
Введите следующую команду в командной строке
cmake -version
Как показано ниже, приведена некоторая базовая информация, указывающая на нормальную установку.

Настройте CMake в VSCode


Как правило, после того, как вы просто установите плагин CMake, вам будет автоматически предложено выбрать цепочку инструментов компиляции. Если подсказки нет или вы хотите заменить другие цепочки инструментов компиляции, вы можете использовать ctrl + shiftl + p, ввести следующие инструкции, а затем выбрать собственную установленную компиляцию во всплывающем окне. Цепочка для инструментов.

CMake:Select a Kit

Использование CMake

Теперь мы создаем каталог со следующей структурой:

Код main.c выглядит следующим образом:

Чтобы скомпилировать этот файл, мы редактируем файл CMakeLists.txt следующим образом:

Затем войдите в каталог Build и выполните cmake

Вывод выглядит следующим образом, и в папке Build создается много файлов, включая файл Makefile.

Файлы, содержащиеся в папке Build

На данный момент мы используем make Команда, вы можете скомпилировать нашу программу.


Наконец, попробуйте, результат нормальный.

Интеллектуальная рекомендация

совместный запрос mysql с тремя таблицами (таблица сотрудников, таблица отделов, таблица зарплат)

1. Краткое изложение проблемы: (внизу есть инструкция по созданию таблицы, копирование можно непосредственно практиковать с помощью (mysql)) Найдите отделы, в которых есть хотя бы один сотрудник. Отоб.


[Загрузчик классов обучения JVM] Третий день пользовательского контента, связанного с загрузчиком классов


IP, сеанс и cookie

Для сборки под Linux рекомендуется запускать следующий контейнер docker:

Пример программы

В общей папке для компьютеров с операционными системами Linux и Windows (один или оба компьютера – виртуальные машины) создайте папку с проектом и разместите в ней следующие исходные коды:

  • в папке src файлы get_os_name.c и main.c ;
  • в папку include файл get_os_name.h .

Содержимое файла get_os_name.c :

Содержимое файла get_os_name.h :

Содержимое файла main.c :

Соберите пример под Windows:

Проверьте его работоспособность в обеих системах.

Сборка с помощью cmake

Создайте новый каталог для изучения примера сборки с помощью cmake и скопируйте в него папки src и include вместе с файлами.

Добавьте в новый каталог файл CMakeLists.txt :

В первой строчке конфигурации (программы для cmake) мы задаем минимальную версию cmake. Во второй – имя проекта.

Функция add_executable добавляет в проект задачу (target, цель) собрать исполняемый файл (программу). Первым аргументом этой функции является имя задачи, последующие аргументы – файлы исходных кодов.

Функция target_include_directories задает для задачи каталог с включаемыми (include, заголовочными) файлами. Первый аргумент – задача. Далее указывается область действия этой функции ( PRIVATE – только указанная задача, PUBLIC – весь проект). После чего указывается каталог.

В последней строке показано использование переменных cmake. Переменная PROJECT_SOURCE_DIR равна пути к каталогу проекта.

Сборка под Windows

Создайте каталог wbuild и перейдите в него.

Выполните в нем команду:

Программа cmake при запуске требует один аргумент – каталог проекта, в котором должен находиться файл CMakeLists.txt . Двоеточие как в Windows, так и в Linux означает родительский каталог по отношению к текущему.

При выполнении cmake пытается найти в операционной системе средства для сборки программ. После этого найденные средства для сборки тестируются. Далее генерируются конфигурационные файлы для сборки программы с помощью найденных средств сборки. Если на каком-либо этапе произойдет ошибка, то будет выдано соответствующее предупреждение.

При успешном выполнении cmake создаст в каталоге wbuild файл с именем каждой задачи и расширением .vcxproj . В терминах Visual Studio это называется проектом (project).

Также в этом каталоге будет создан файл с именем проекта и расширением .sln . В Visual Studio это называется решением (solution). Оно содержит в себе все проекты, соответствующие задачам в cmake, а также некоторые дополнительные проекты.

Соберите программу с помощью программы:

По умолчанию будет создана отладочная версия программы, которую можно найти в папке Debug . Можно также создать рабочую версию, указав msbuild ключ -p:Configuration=Release (результат будет в папке Release ).

Сборка под Linux

Создайте каталог lbuild и перейдите в него.

Выполните в нем команду:

Соберите программу с помощью программы:

Команда make собирает проект в текущей папки (понятие проекта в make и cmake совпадают). В результате получится готовая программа, имя которой совпадает с именем проекта. Запустите и проверьте правильность ее работы.

Статические библиотеки

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

Создайте новый каталог для изучения примера со статической библиотекой и скопируйте в него папки src и include вместе с файлами.

Добавьте в новый каталог файл CMakeLists.txt :

В данном примере будет две задачи: создание библиотеки и готовой программы.

Задача создания библиотеки создается функцией add_library . Первый ее аргумент – название задачи, обычно совпадающее с именем библиотеки. Далее указывается тип библиотеки (статическая), после чего указываются файлы исходных кодов.

Функция target_include_directories , как и в предыдущем примере, задает каталоги с заголовочным файлами. В отличие от предыдущего примера указывается область действия PUBLIC, чтобы подключить эти заголовочные файлы и ко второй задаче (создание программы).

Функция add_executable используется так же, как и в предыдущем примере.

Функция target_link_libraries подключает ко второй задаче библиотеку, создаваемую в первой задаче.

Соберите пример под Windows и под Linux (используя те же команды, что и в предыдущем примере).

Проверьте правильность работы программ.

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

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

Динамические библиотеки

Код функций из динамической библиотеки помещается в отдельный от программы файл. Функции из таких библиотек компонуются к основной программе во время работы программы (поэтому и называются динамическими). Достоинством динамических библиотек является возможность использовать их одновременно из нескольких программ (отсюда второе название – разделяемые (shared) библиотеки). Их недостаток – необходимость контролировать их наличие в операционной системе и версию.

Создайте новый каталог для изучения примера со статической библиотекой и скопируйте в него папки src и include вместе с файлами.

Добавьте в новый каталог файл CMakeLists.txt :

Отличие конфигураций статически и динамически присоединяемых библиотек заключается в использовании ключевых слов STATIC и SHARED в функции add_library . Для Linux отличия заканчиваются.

Если сборка ведется под Windows (что проверяется командой if(WIN32) ), переменную CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS нужно установить в значение ON с помощью функции set . Это указывает cmake сгенерировать дополнительные файлы.

В Windows для создания программ, использующие динамические библиотеки, требуются дополнительные файлы для сборки программы. Код самих функций помещается в файлы с расширением .dll , которые используются во время работы. Во время сборки требуются файлы с описанием функций в файле .dll и кодом для доступа к этим функциям.

Соберите пример под Windows и под Linux (используя те же команды, что и в предыдущем примере).

Проверьте правильность работы программ.

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


В CMake 3.19 и 3.20 был зарелижен CMakePresets.json, который позволяет пользователям указывать общие параметры настройки, сборки и тестирования и делиться ими с другими пользователями. Мы добавили поддержку CMakePresets.json в Visual Studio и создали расширение CMake Tools для Visual Studio Code. Теперь вы можете вызывать CMake с CMakePresets.json в Visual Studio, в Visual Studio Code, в конвейере непрерывной интеграции и из терминалов в Windows, Linux и macOS.

Почему я должен использовать CMake Presets?

Поддержка configurePresets была зарелижена в CMake 3.19. Наша команда в Microsoft работала над поддержкой buildPresets и testPresets в CMake 3.20, и мы очень рады решить некоторые типичные проблемы, связанные с конфигурацией и сборкой CMake, с помощью CMake Presets (пресетов).

Более плавный переход между Visual Studio и Visual Studio Code. С добавлением поддержки CMakePresets.json один и тот же файл можно использовать для управления CMake как в Visual Studio, так и в Visual Studio Code. Это упрощает разработчикам в вашей команде переключение между Visual Studio и Visual Studio Code и позволяет работать в среде разработки, которая лучше всего отвечает их текущим потребностям.

Предустановки для отдельно взятого проекта всегда можно сохранить или достать из системы контроля версий. CMake поддерживает два файла: CMakePresets.json и CMakeUserPresets.json. CMakePresets.json предназначен для сохранения глобальных предустановок проекта, а CMakeUserPresets.json задуман для хранения собственных локальных предустановок под отдельных разработчиков. Это гарантирует, что информацию, касающуюся конкретного проекта, можно будет вносить в систему контроля версий, а новым членам группы будет проще влиться в работу. Это также упрощает для команд синхронизацию изменений в своих сборках CMake. И CMakePresets.json, и CMakeUserPresets.json поддерживаются в Visual Studio и Visual Studio Code.

Воспроизведение сборок в Visual Studio и Visual Studio Code из командной строки. Поскольку CMakePresets.json поддерживается самим CMake, тот же файл CMakePresets.json можно использовать для вызова CMake в Visual Studio, в Visual Studio Code, в конвейере непрерывной интеграции и из командной строки в Windows, Linux и macOS. Вызов CMake с CMakePresets.json из командной строки поддерживается с CMake версии 3.20.

Упростите возню с инструкциями по сборке для проектов CMake с открытым исходным кодом. Вы можете запулить любой проект, в корневом каталоге репозитория которого есть файл CMakePresets.json, собрать и протестировать его локально, используя инструкции, вложенные в пресет. Все аргументы команды, которые могут быть переданы в CMake или CTest из командной строки, можно указать в Configure, Build или Test пресетах.

Больше информации о пресетах CMake вы можете найти в моей недавней презентации в ACCU, где я демонстрирую, как использовать CMakePresets.json в Visual Studio, из командной строки и в конвейере GitHub Actions. Вы также можете ознакомиться с примером файла CMakePresets.json, зарегистрироваться в Pure Virtual C++ или почитать официальную документацию CMake. Более подробная информация об интеграции пресетов CMake в Visual Studio и VS Code приведена ниже.

Пресеты CMake в Visual Studio

Лучшим источником информации об интеграции пресетов CMake в Visual Studio является наша документация. Интеграция пресетов CMake в Visual Studio пока еще в статусе превью.

CMakePresets.json станет рекомендуемой альтернативой CMakeSettings.json. Visual Studio никогда не будет считывать данные одновременно из CMakePresets.json и CMakeSettings.json. Вы можете включить интеграцию пресетов CMake для всех проектов в Tools > Options > CMake > General. Чтобы активировать интеграцию, необходимо закрыть и снова открыть папку в Visual Studio.


Вы можете включить интеграцию пресетов CMake для одного проекта, добавив файл CMakePresets.json в корень открытой папки. Опять же, для активации интеграции вы должны закрыть и снова открыть папку. Дополнительные сведения смотрите в разделе Enable CMake Presets integration in Visual Studio 2019.

После включения интеграции пресетов CMake вы увидите три раскрывающихся списка в панели меню.


В раскрывающемся списке слева указывается активная целевая система (Target System). Это система, в которой CMake будет вызываться для настройки и сборки проекта. В этом раскрывающемся списке отображается локальный компьютер, все SSH-подключения в Connection Manager по имени узла и все инсталляции Windows Subsystem для Linux (WSL), которые сможет найти Visual Studio.

В раскрывающемся списке посередине указывается активный Configure Preset, который будет использоваться при вызове CMake для создания системы сборки проекта. В этом раскрывающемся списке приведены не скрытые Configure пересеты, определенные в файлах CMakePresets.json и CMakeUserPresets.json, которые применяются в Target System. Активный Configure Preset на изображении выше - это ninja-debug.

В раскрывающемся списке справа указывается активный Build Preset, который будет использоваться при вызове CMake для сборки проекта. В этом раскрывающемся списке приведены не скрытые Build пресеты, определенные в файлах CMakePresets.json и CMakeUserPresets.json, которые применяются к активному Configure Preset. Активный Build Preset на изображении выше - verbose-build. Ознакомьтесь с нашей документацией по настройке и сборке в разделе CMake configuration and build.

С помощью Visual Studio вы можете редактировать, создавать и отлаживать ваши CMake таргеты в Windows, WSL и удаленных системах из одной IDE. Visual Studio автоматически скопирует ваш исходный код в указанную целевую систему, но ваши инструменты сборки (CMake, генератор, компиляторы), rsync, zip и gdb должны быть уже установлены. Дополнительная информация в разделе Creating a Linux environment.

Дополнительную информацию о добавлении, редактировании пресетов, запуске тестов и многом другом смотрите в нашей документации в разделе CMake Presets integration in Visual Studio.

Пресеты CMake в расширении CMake Tools для Visual Studio Code

Лучшим источником информации об интеграции пресетов CMake в расширение CMake Tools является наша документация. Интеграция пресетов CMake в расширение CMake Tools пока еще в статусе превью.

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

Создаю 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:




Запускаю проект после изменений (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 , а также в корне.



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

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

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

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

Еще раз отмечу замечательную особенность работы с 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 , а также в публикациях по ссылкам, которые приводятся ниже.

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