2014-09-11 11 views

Odpowiedz

217

Make (lub raczej Makefile) to system kompilacji - napędza kompilator i inne narzędzia do budowania kodu.

CMake jest generatorem systemów konstrukcyjnych. Może tworzyć pliki Makefile, może tworzyć pliki kompilacji Ninja, może tworzyć projekty KDEvelop lub XCode, może tworzyć rozwiązania Visual Studio. Od tego samego punktu początkowego ten sam plik CMakeLists.txt. Jeśli więc masz projekt niezależny od platformy, CMake jest sposobem na to, aby był niezależny od systemu.

Jeśli masz programistów systemu Windows używanych do programistów Visual Studio i Unix, którzy przysięgają na GNU Make, CMake jest (jedną z) dróg do wykonania.

Zawsze polecam używanie CMake (lub innego generatora systemów kompilacji, ale CMake jest moją osobistą preferencją), jeśli zamierzasz, aby twój projekt był wieloplatformowy lub szeroko wykorzystywany. Sam CMake oferuje również kilka fajnych funkcji, takich jak wykrywanie zależności, zarządzanie interfejsem biblioteki lub integracja z CTest, CDash i CPack.

Korzystanie z generatora buildsystem sprawia, że ​​Twój projekt jest bardziej przyszłościowy. Nawet jeśli teraz jesteś GNU-Make-Only, co jeśli później zdecydujesz się rozszerzyć na inne platformy (czy to Windows lub coś osadzonego), czy po prostu chcesz użyć IDE?

+0

dziękuję! Dla potwierdzenia, że ​​jeśli programuję tylko w środowisku Linux, to tylko makefile jest odpowiedni, ale jeśli chcę, żeby program z Linuksa działał na Macu, to znaczy, że cmake jest lepszą opcją, bo rozumiem, że nie musimy tworzyć nowego pliku Makefile Mac, ale po prostu uruchom cmake. Czy to wszystko? – rish

+3

@rish Tak, to jest sedno. Zauważ jednak, że istnieje więcej sposobów programowania na Linuksie niż Makefile - zobacz np. QtCreator, KDEvelop, Ninja. Dla każdego z nich jest to albo "utwórz projekt i zachowaj synchronizację z plikiem Makefile", albo "ponownie uruchom CMake". I, jak wspomniano w odpowiedzi, CMake ma także inne funkcje, takie jak odnajdywanie zależności (np. [Find_package() '] (http://www.cmake.org/cmake/help/v3.0/command/find_package.html)) lub wsparcie w testowaniu/pakowaniu. – Angew

+3

Czytałem, że CMake nie może tworzyć nierekurencyjnych plików Makefile. Czy to nadal prawda? –

Powiązane problemy