2013-01-09 16 views
12

Znalazłem podobny temat: What are the differences between Autotools, Cmake and Scons?, ale moje pytanie jest trochę inne i myślę, że odpowiedzi mogą być również inne.cmake vs waf dla projektu C++

Znalazłem wiele artykułów informujących, że Waf jest unstalbe (zmiany API), nie jest jeszcze gotowy do produkcji itp. (Ale wszystkie te artykuły mają 2 lub 3 lata).

Które z nich budować narzędzia powinny być stosowane, jeśli chcę:

  • tworzyć duże C++ (11) projekt - powiedzmy kompleksu kompilator
  • korzystanie z LLVM
  • być pewien, że będzie elastyczny i prosty w użyciu
  • upewnij się, że będzie szybko wymagał
  • skompilować pod wszystkimi standardowymi platformami (podstawową platformą jest Linux, ale chcę też skompilować pod Windows i MacOSX)

Czytając wiele artykułów dowiedziałem się o Cmake i dowiedziałem się o "najlepszych" dostępnych narzędziach, ale nie mam z nimi żadnego doświadczenia i trudno jest znaleźć jakiekolwiek porównanie, które nie jest zbyt stronnicze (jak porównanie autor scons) i niezbyt old.really

Odpowiedz

12

WAF obejmuje prawie wszystkie swoje wymagania ...

  • zmianę API nie jest problem jak WAF powinny być zawarte w archiwum źródłowego (< 100Ko)

  • duży projekt: można podzielić twoja konfiguracja w podkatalogach (konteksty mogą być dziedziczone). Pracowałem nad projektami z ponad 10 tys. Plików w C/C++/fortran77/fortran90/python/Cython, w tym w dokumentacji doxygen/sphinx.

  • elastyczność i easyness: można dodać dodatkowe moduły en python (http://code.google.com/p/waf/wiki/AddingNewToolsToWaf)

  • szybko: zadania mogą być uruchamiane równolegle: http://www.retropaganda.info/~bohan/work/psycle/branches/bohan/wonderbuild/benchmarks/time.xml

  • wielu plat-forma: można uruchomić WAF wszędzie Python jest dostępny, który obejmuje Windows i MacO. Waf jest kompatybilny z mscvc, gcc, icc i innymi kompilatorami. Możesz tworzyć projekty wizualne/zaćmienia.

... ale WAF wydaje się mieć problem z LLVM: http://code.google.com/p/waf/issues/detail?id=1252

EDIT: jak powiedział Wojciech Danilo LLVM problem został rozwiązany

+0

Nie, nie ma problemu - udało mi się go rozwiązać i właśnie dodałem rozwiązanie do tematu :) –

+0

Dodatek Dowiedziałem się, że Waf jest dużo bardziej elastyczny niż cmake i jest naprawdę łatwy w użyciu. Zbudowaliśmy na nim nasz niestandardowy system kompilacji i działa świetnie! –

3

Obecnie używam CMake do implementacji mojego własnego języka za pośrednictwem C++ 11 i LLVM.

Podoba mi się CMake dla łatwej w użyciu składni. LLVM można załadować za pomocą łatwego polecenia "load_package". Następnie możesz użyć wszystkich nagłówków i bibliotek, których potrzebujesz. CMake pozwala skryptom potomnym dziedziczyć zmienne ze skryptów nadrzędnych. Nie musisz więc ustawiać zmiennych i ładować pakietów w każdym podkatalogu.

Obsługa C++ 11 zależy od kompilatora, którego chcesz użyć. W sumie CMake to tylko układ do tworzenia "prawdziwego" skryptu kompilacji.

Gdy używasz, możesz użyć make's --jobs = N, aby przyspieszyć kompilację na platformach wielordzeniowych. W systemie Windows można wygenerować pliki projektu Visual Studio 2012 i korzystać z systemu kompilacji firmy Microsoft oraz używać ich zadań kompilacji w celu przyspieszenia procesu kompilacji. Powinieneś zawsze utworzyć podfolder dla plików kompilacji (myproject/build lub coś podobnego). W ten sposób utrzymujesz drzewo źródłowe w czystości (cd build; cmake ..; cd ..).

Nie mogę mówić za wszystkie pozostałe narzędzia.

+0

Kiedy przeniesione do 'cmake' ; uczenie się było dość bolesne. Dokumentacja - choć ulepszająca - była zamętem. Język oparty na makrach sprawia, że ​​czytanie cmake jest koszmarem (dopóki nie wytrenujesz sobie oczu), ale wszystko na koniec było tego warte. Nie używam "wafla", ale myślę o tym, żeby dać sobie szansę na inne projekty. Jego kuszące od czasu jego Pythona. – Dilawar

Powiązane problemy