Pytanie Używanie Visual Studio do IDE, ale używanie CMake do konfiguracji na wielu platformach


Znalazłem wiele podobnych pytań do tego, o co mam zamiar zapytać, ale nie wydaje się, żebym się rozluźnił, pomóż mi zrozumieć, jak robić to, co chcę robić, zakładając, że jest to nawet wykonalne.

Bardzo lubię Visual Studio i chcę go używać jako środowiska programistycznego dla projektów C ++, ale chcę też móc tworzyć dowolne projekty na moim systemie Linux z podwójnym bootowaniem, jeśli chcę. Chcę również móc uporządkować moje nagłówki i pliki źródłowe w specjalną strukturę katalogów na współużytkowanym dysku. Chcę użyć CMake do skonfigurowania projektu do zbudowania go za pomocą Make on Linux lub VS w systemie Windows.

Czy możliwe jest utrzymanie projektu w Visual Studio 2012 Pro, aby wykorzystać jego IntelliSense i kompilację, aby szybko napisać kod i przetestować go, a następnie łatwo uczynić pliki źródłowe częścią konfiguracji CMake w innym katalogu ( Nadal będę musiał przechowywać moje pliki CMT .txt bez względu na wszystko)?

Mogę zrobić coś w rodzaju kopiowania mojego źródła z mojego katalogu projektu do folderu plików CMake za każdym razem, gdy dodaję lub modyfikuję kod, a następnie aktualizuję moje pliki CMake .txt, ale to wydaje się czasochłonne.

EDYCJA: Wiem, że istnieje konwerter, który konwertuje rozwiązania do plików CMake. Czy to moja najlepsza opcja? Jeśli tak, czy działa dobrze?


12
2018-02-21 06:25


pochodzenie


cóż, używamy cmake i VS do opracowania. I po szoku (z mojej strony, kiedy rok temu dołączyłem do firmy), wolałbym, żeby napisać twój plik cmakelist.txt. To sprawia, że ​​MYŚLISZ o strukturze twojego projektu, zanim strzelisz do niebieskiego (aka "rmt -> new file"). Więc robimy to w pobliżu. Najpierw dodaj pliki do cmakelist i skonfiguruj / wygeneruj pliki .sln za pomocą cmake - Najzero
cmake to narzędzie do generowania projektu: definiujesz swój projekt i pliki oraz budujesz ustawienia w jednym miejscu, a następnie używasz cmake do generowania pliku wizualnego studia, projektu xcode, plików makex z systemu Unix - itd. Chociaż istnieje kilka metod zmierzających w przeciwnym kierunku, to nie jest zalecana konfiguracja. Czy istnieje konkretny powód, dla którego nie chcesz generować projektu wizualnego? - hsmith
@hsmith Chciałbym pójść w przeciwnym kierunku, ponieważ uważam, że wygodniej jest tworzyć wszystkie moje pliki za pomocą VS i wszędzie wokół traktuję to tak, jak każdy inny projekt Windows (podczas pisania kodu dla platformy wieloplatformowej), ale na końcu dnia mając wszystkie pliki w folderach za pomocą cmakelist.txt gotowe do skonfigurowania na dowolnej innej platformie. Chcę przejść od VS-> CMake-> Linux Make. Chcę VS tam dla łatwości użycia i szybko robiąc Windowsa buduje. To najlepszy sposób, w jaki mogę to wyrazić. - contrapsych


Odpowiedzi:


Moja najlepsza odpowiedź na twoje pytanie:

Chociaż nie mogę polecić tego narzędzia, ponieważ go nie używałem, wydaje mi się, że jest ono najbliższe temu, czego szukasz.

http://sourceforge.net/projects/vcproj2cmake/

Wymaga zainstalowania na komputerze runtime runtime, ale wygeneruje CMakeLists na podstawie twojego projektu studyjnego.

Byłbym ostrożny, w zależności od tego zbyt wiele, ponieważ mogą występować pewne subtelne niuanse CMake'a, które są tracone podczas konwersji, ale ma kilka pozytywnych recenzji i na pewno ułatwi to proces, nawet jeśli przed sprawdzeniem są wykonywane pewne ręczne kroki. w (aby sprawdzić, czy skrypt CMake jest poprawny).

Być może można to zintegrować z testowaniem jednostkowym, aby zweryfikować integralność skryptów cmake? I zawsze możesz oferować poprawki na problemy, które znajdziesz.

Potencjalna alternatywa:

Wnioskuję pewne rzeczy, więc wybacz mi, jeśli przyjmę jakieś założenia.

Jeśli twoje cele mają mieć charakter wieloplatformowy, a CMake nie jest wymogiem jako technologia (tylko środkiem do tego celu), ale nie chcesz adoptować przy użyciu zalecanego przepływu pracy CMake, ponieważ nie jest to bardzo intuicyjne (mogę całkowicie zrozumieć to), być może możesz rzucić okiem na Premake, który jest nowszym, ale wciąż dość solidnym narzędziem do generowania projektów:

http://industriousone.com/premake

Odkryłem, że składnia (czysta lua) jest o wiele łatwiejsza w grokowaniu, a jej projekty są znacznie bardziej zbliżone do rozwiązań Visual Studio. To może być bardziej naturalny przepływ pracy dla Ciebie.

Jest to także open source i odkryłem, że dodanie do niego rozszerzeń jest naprawdę zaskakująco łatwe (minął rok, odkąd ostatni raz go używałem, więc nie jestem pewien, jak wygląda teraz jego stan). Być może można również zbudować generator odwrotny, ponieważ biblioteka jest dostarczana wraz z parserem projektu graficznego i przy odrobinie kreatywności, którą można wygenerować w obu kierunkach.

Zdecydowałem się nie adoptować go rok temu, ponieważ w tamtym czasie miał trudności z generowaniem projektów XCode, które zależały od siebie (być może naprawione!) Nie miałem jednak problemów z rozwiązaniami Makefiles lub Visual Studio.

Ostateczne zalecenie

Powodem, dla którego nie polecałbym generowania odwrotnego generowania skryptów generujących projekty z projektu studia wizualnego, jest po prostu bardzo niezręczna zależność od twojego projektu. Projekty Visual Studio nie są ustandaryzowane, a nawet otwarte - a jeśli Microsoft zmieni format, możesz przerwać swój przepływ pracy, dopóki Ty lub ktoś inny nie utworzy łaty do generatora odwrotnego, abyś mógł znów pracować.

Można argumentować, że generowanie projektów ma te same problemy, ale Visual Studio zawsze było kompatybilne wstecz - lub przynajmniej z narzędziami do aktualizacji projektu. Generowanie projektu w starszej wersji najprawdopodobniej zawsze będzie działać, a próba przeanalizowania nowszej wersji rozwiązania studia wizualnego będzie o wiele bardziej podatna na błędy i uszkodzenia.

Jeśli jest to poważny projekt produkcyjny, który, mamy nadzieję, będzie nadal używany i utrzymywany przez wiele następnych lat, zdecydowanie zaleciłbym zastosowanie sprawdzonego przepływu pracy (działającego bezpośrednio w plikach CMake lub Premake), nawet jeśli jest mniej niż idealny lub niewygodny w pierwszy dla programistów. Jeśli ma to być projekt długoterminowy, czas potrzebny na zaznajomienie się z nowym przepływem pracy byłby mniejszy do czasu, gdy zajęłoby się utrzymaniem systemu kompilacji adhoc na wielu platformach i różnych zespołach. Plus, to by dodać kolejne narzędzie do paska jako programista. Tylko moje 2 centy ~


5
2018-03-16 19:57



Dzięki za rekomendacje, byli bardzo pomocni. Premake wygląda interesująco, więc będę musiał przeprowadzić dodatkowe dochodzenie. W końcu mogę zakończyć umieszczanie moich plików źródłowych w oddzielnym katalogu od projektu i zaimportować je do VS. Kiedy mam kod, który kompiluje i działa na VS, wchodzę i edytuję pliki cmake i testuję to. - contrapsych


Biorąc pod uwagę moje ostatnie doświadczenia, kiedy udało mi się użyć CMake do generowania pliku rozwiązania Eclipse lub Visual Studio, nie polecam automatycznie konwertować rozwiązania do pliku cmake. Pliki projektu Visual Studio zawierają nadmierne informacje i parametry, które często nie są potrzebne, nie są bezpośrednio obsługiwane przez cmake (funkcjonalność wyrażona różnymi konstrukcjami) lub nie są obsługiwane.

Również układ rozwiązania dla wszystkich źródeł i plików projektów może być dość dziwny i nie wygodny dla innych platform.

Szacuję, że czyszczenie wygenerowanego pliku zajęłoby więcej czasu niż napisanie czystego pliku cmake od zera. Jest to również rozsądniejszy sposób, ponieważ masz pełną kontrolę nad strukturą projektu.

W moim przypadku otrzymałem następujące polecenie cmake, aby wygenerować rozwiązanie VS:

cmake -G "Visual Studio 10" -D DEBUG=0 .

i dla kompilacji wsadowej z linii poleceń i instalacji w systemie Windows:

cmake --build . --target install --config VC_CONFIGURATION_1  -- "/v:m"
cmake --build . --target install --config VC_CONFIGURATION_2  -- "/v:m"

Sam plik cmake jest wieloplatformowy. Oczywiście ma kilka linii specyficznych dla systemu Windows definiujących konfiguracje i opcję WIN32 w add_executable (), ale możesz je warunkować tylko dla tej platformy.


1
2018-03-21 10:20



Dzięki za odpowiedź, pójdę na konwencjonalne sposoby, jeśli żadne z innych rozwiązań nie zadziała mi zbyt dobrze. - contrapsych