Использование 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 вам нужно будет писать все с нуля.
Ответ 8
Здесь много замечательных ответов, но они могут быть заменены этим Поддержка CMake в Visual Studio (5 октября 2016)