Использование CMake для создания файлов проектов Visual Studio С++

Я работаю над открытым исходным кодом проекта С++ для кода, который компилируется в Linux и Windows. Я использую CMake для создания кода в Linux. Для удобства настройки и политических причин я должен придерживаться файлов/редактора проектов Visual Studio в Windows (я не могу переключиться на Code::Blocks, например). Я вижу инструкции для создания файлов Visual Studio с помощью CMake, как здесь.

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

Ответ 1

CMake на самом деле довольно хорош для этого. Ключевой частью было все, кто на стороне Windows, должен помнить о запуске CMake перед загрузкой в ​​решение, и каждый, кто находится на нашей стороне Mac, должен был помнить, чтобы запустить его перед make.

Самая сложная часть была как разработчик Windows, убедившись, что ваши структурные изменения были в файле cmakelist.txt, а не в файлах решений или проектов, поскольку эти изменения, вероятно, будут потеряны и даже если они не будут потеряны, не будут перенесены на Mac, которые также нуждались в них, а парням Mac пришлось бы не изменять файл make по тем же причинам.

Это просто требует немного мысли и терпения, но сначала будут ошибки. Но если вы используете непрерывную интеграцию с обеих сторон, то они рано или поздно будут встряхивать, и люди в конечном итоге получат привычку.

Ответ 2

Не уверен, что он напрямую связан с вопросом, но я искал ответ о том, как генерировать *.sln из проектов cmake. Я обнаружил, что можно использовать что-то вроде этого:

cmake -G "Visual Studio 10"

В примере генерируются необходимые файлы VS 2010 из входного файла CMakeLists.txt

Ответ 3

Мы перенесли цепочку построения отдела на CMake, и у нас было несколько внутренних дорожных альбомов, поскольку другие отделы, в которых используются наши файлы проектов, и где они привыкли просто импортировать их в свои решения. У нас также были некоторые жалобы на то, что CMake не был полностью интегрирован в менеджер проектов/решений Visual Studio, поэтому файлы должны были добавляться вручную в CMakeLists.txt; это был серьезный разрыв в рабочем процессе, к которому привыкли люди.

Но в целом это был довольно плавный переход. Мы очень рады, так как нам больше не нужно иметь дело с файлами проекта.

Конкретный рабочий процесс для добавления нового файла в проект очень прост:

  • Создайте файл, убедитесь, что он находится в правильном месте.
  • Добавьте файл в CMakeLists.txt.
  • Построить.

CMake 2.6 автоматически перезапускает себя, если какие-либо файлы CMakeLists.txt изменились (и (semi-) автоматически перезагружает решение/проекты).

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

Ответ 4

Как говорит Алекс, он работает очень хорошо. Единственная сложная задача - запомнить любые изменения в файлах cmake, а не из Visual Studio. Таким образом, на всех платформах рабочий процесс похож на то, что вы использовали простые старые make файлы.

Но с ним довольно легко работать, и у меня не было проблем с cmake, генерирующим недопустимые файлы или что-то в этом роде, поэтому я не стал бы слишком беспокоиться.

Ответ 5

CMake может генерировать действительно приятную Visual Studio .projs/.slns, но всегда есть проблема с необходимостью изменять файлы .cmake, а не .proj/.sln. Как и сейчас, мы имеем дело с этим следующим образом:

  • Все исходные файлы идут в /src, а файлы, видимые в Visual Studio, - это просто "ссылки" на них, определенные в .filter.
  • Программист добавляет/удаляет файлы, которые запоминают работу в определенном каталоге /src, а не в проекте по умолчанию.
  • Когда он закончил, он запустил script, который "обновляет" соответствующие файлы .cmake.
  • Он проверяет, может ли код быть создан в восстановленной среде.
  • Он выполняет код.

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

Еще одна важная вещь, о которой нужно знать, - отсутствие поддержки (afaik) для "Конфигурации решений" в CMake. В соответствии с этим вам необходимо создать каталоги two с проектами/решениями - по одному для каждого типа сборки (отладка, выпуск и т.д.). Нет прямой поддержки более сложных функций - другими словами: переключение между конфигурациями не даст вам того, чего вы ожидаете.

Ответ 6

CMake без проблем производит проекты и решения Visual Studio. Вы даже можете создавать проекты/решения для разных версий Visual Studio без внесения каких-либо изменений в файлы CMake.

Добавление и удаление исходных файлов - это вопрос изменения CMakeLists.txt, который содержит список исходных файлов и регенерирует проекты/решения. Существует даже функция globbing для поиска всех источников в каталоге (хотя ее следует использовать с осторожностью).

В следующей ссылке очень хорошо объясняется поведение CMake и Visual Studio.

CMake и Visual Studio

Ответ 7

Я начал свой собственный проект под названием syncProj. Документация/ссылки для загрузки отсюда:

https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit# https://sourceforge.net/projects/syncproj/

Если вы планируете использовать Visual studio для разработки, и в настоящее время поддерживается только С++.

Основным преимуществом по сравнению с другими системами make является то, что вы можете действительно отлаживать ваш script, как он основан на С#.

Если вы не знакомы с syncProj, вы можете просто преобразовать ваше решение/проект в .cs script и продолжить дальнейшее развитие с этой точки.

В cmake вам нужно будет писать все с нуля.