Використання CMake для створення файлів проектів Visual Studio C ++


91

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

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


1
Пам'ятайте про цю відповідь тим, хто у GNU + Linux намагається генерувати файли проектів для Visual Studio, що стосується Windows . TL; DR: Генератори залежать від платформи, і для цього ви повинні бути в Windows.
code_dredd

Відповіді:


57

CMake насправді досить непоганий для цього. Ключовою частиною було те, що всі на стороні Windows повинні пам’ятати про те, щоб запустити CMake перед завантаженням у рішення, і всі на нашій стороні Mac повинні пам’ятати про те, щоб запустити його перед створенням.

Найскладнішим було те, що розробник Windows переконався, що ваші структурні зміни були у файлі cmakelist.txt, а не у файлах рішень або проектів, оскільки ці зміни, ймовірно, загубляться, і навіть якщо їх не втратити, вони не будуть передані на сторону Mac, яка вони також потребували їх, і хлопці Mac повинні пам'ятати, що не змінюють файл make з тих самих причин.

Просто потрібно трохи подумати і потерпіти, але спочатку будуть помилки. Але якщо ви використовуєте безперервну інтеграцію з обох сторін, тоді їх рано витрясуть, і люди з часом увійдуть у звичку.


11
Якщо це було правдою одного разу, це вже не так. Будь-які зміни в CMakeLists.txt спричинять регенерацію системи збірки (файли проектів для Visual Studio, make-файли тощо). Робочий процес у Visual Studio доволі дратує, оскільки Visual Studio не регенерує файли проекту, коли виявляє, що щось змінилося, а натомість чекає, поки ви зробите збірку, яка призводить до появи діалогового вікна, оскільки збірку потрібно перервати, щоб повторно -завантажте файл проекту.
Віталій

1
Застереженням цього є те, що вам не потрібно запускати компілятор Visual Studio через IDE. Ви можете запустити його в командному рядку:C:\...> MSBuild ALL_BUILD.vcxproj
PfunnyGuy

2
@PfunnyGuy Див. Також cmake --build ..
detly

@detly Дякую! Я насправді знайшов це і використовую cmake --build . --config Debug -- /nologo /verbosity:minimal /m. Я вставляю після . target run_testsдля запуску мого тестування googletest unit, і "Налагодження" можна замінити на "Release". (Додавання опції конфігурації для налагодження не є обов’язковим, оскільки це за замовчуванням, але я включив його, щоб продемонструвати, як його можна поміняти місцями на "Випуск")
PfunnyGuy

47

Не впевнений, що це безпосередньо пов’язано з питанням, але я шукав відповіді, як згенерувати * .sln з проектів cmake, я виявив, що можна використовувати щось подібне:

cmake -G "Visual Studio 10"

Приклад генерує необхідні файли VS 2010 із вхідного файлу CMakeLists.txt


1
У stackoverflow.com/questions/11269833 / ... @Ivan вказує, що це може бути введений в файл PreLoad.cmake в тій же папці , що і верхнього рівня CMakeLists.txt , а потім ви можете просто зробити cmake.
PfunnyGuy

25

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

Але загалом це був досить плавний перехід. Ми дуже задоволені, оскільки нам більше не доводиться мати справу з файлами проектів.

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

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

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

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


9

Як каже Алекс, це працює дуже добре. Єдина хитра частина - це пам’ятати про внесення будь-яких змін у файли cmake, а не в Visual Studio. Отже, на всіх платформах робочий процес подібний до того, якби ви використовували звичайні старі make-файли.

Але з ним досить просто працювати, і у мене не виникало проблем із cmake, що генерує недійсні файли або щось подібне, тому я б не хвилювався надто сильно.


7

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

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

Наступне посилання дуже добре пояснює особливості поведінки CMake та Visual Studio.

CMake та Visual Studio


Це посилання та його зразковий проект дуже, дуже корисні, дякую за це! Я б порекомендував включити у свою відповідь деякі вихідні коди з репозиторію github , наприклад, згадавши, що проект CMake є еквівалентом рішення, і що щось на зразок add_executable використовується для додавання еквівалента проекту візуальної студії.
jrh

5

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

  1. Усі вихідні файли переходять, /srcа файли, видимі у Visual Studio, - це лише "посилання" на них, визначені в .filter.
  2. Програміст додає / видаляє файли, запам'ятовуючи роботу в визначеному /srcкаталозі, а не в проекті за замовчуванням.
  3. Закінчивши, він запускає сценарій, який "оновлює" відповідні .cmakeфайли.
  4. Він перевіряє, чи можна створити код у відтвореному середовищі.
  5. Він робить код.

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

Ще одне важливе, що слід знати, - це відсутність підтримки ( afaik ) для "Конфігурацій рішення" в CMake. По суті, вам потрібно створити два каталоги з проектами / рішеннями - по одному для кожного типу збірки (налагодження, випуск тощо). Немає прямої підтримки більш складних функцій - іншими словами: перемикання між конфігураціями не дасть вам того, що ви могли б очікувати.


4
Станом на CMake 2.8.10, створені рішення мають 4 звичайні конфігурації збірки, і є підтримка для визначення додаткових спеціальних.
Джон


0

Я розпочав власний проект, який називається syncProj. Документація / посилання для завантаження звідси:

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

Якщо ви плануєте використовувати Visual studio для розробки, і наразі підтримується лише C ++.

Головною перевагою порівняно з іншими системами make є те, що ви можете реально налагодити свій сценарій, оскільки він заснований на C #.

Якщо ви не знайомі з syncProj, ви можете просто перетворити своє рішення / проект на сценарій .cs і продовжити подальший розвиток з цього моменту.

У cmake вам потрібно буде написати все з нуля.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.