Использование CMake для генерации файлов проекта Visual Studio C ++ - PullRequest
84 голосов
/ 27 декабря 2008

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

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

Ответы [ 8 ]

54 голосов
/ 27 декабря 2008

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

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

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

42 голосов
/ 13 февраля 2012

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

cmake -G "Visual Studio 10"

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

25 голосов
/ 28 декабря 2008

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

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

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

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

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

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

9 голосов
/ 28 декабря 2008

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

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

5 голосов
/ 18 января 2014

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

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

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

CMake и Visual Studio

5 голосов
/ 23 марта 2011

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

  1. Все исходные файлы переходят на /src, а файлы, видимые в Visual Studio, являются просто «ссылками» на них, определенными в .filter.
  2. Программист добавляет / удаляет файлы, запоминая работу в определенной директории /src, а не в проекте по умолчанию.
  3. Когда он закончил, он запускает скрипт, который "обновляет" соответствующие .cmake файлы.
  4. Он проверяет, может ли код быть создан в воссозданной среде.
  5. Он передает код.

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

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

0 голосов
/ 25 июня 2017

Здесь много хороших ответов, но они могут быть заменены этой поддержкой CMake в Visual Studio (5 октября 2016 г.)

0 голосов
/ 11 марта 2017

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

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

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

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

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

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

...