Подтвердить что ты не робот

Cmake vs waf для проекта С++

Я нашел аналогичную тему: В чем отличия между Autotools, Cmake и Scons?, но мой вопрос немного другой, и я думаю, что ответы могут быть другими тоже.

Я нашел много статей, рассказывающих, что waf is notalbe (изменения API), еще не готов к производству и т.д. (но всем этим статьям 2 или 3 года).

Какой из этих инструментов сборки следует использовать, если я хочу:

  • создать большой проект С++ (11) - скажем, сложный компилятор
  • использовать с LLVM
  • убедитесь, что он будет гибким и простым в использовании.
  • убедитесь, что он будет достаточно быстрым
  • скомпилировать под всеми стандартными платформами (базовая платформа - Linux, но я хочу также скомпилировать под Windows и MacOSX).

Читая много статей, я обнаружил, что Cmake и waf являются "лучшими" инструментами, но у меня нет опыта с ними, и действительно трудно найти какое-либо сравнение, которое не очень предвзято (например, сравнение схонов автор) и не очень old.really

4b9b3361

Ответ 1

waf охватывает почти все ваши требования...

  • Изменение API: не проблема, поскольку waf должен быть включен в исходный tarball (< 100Ko)

  • большой проект: вы можете разделить свою конфигурацию в подкаталогах (контексты могут быть унаследованы). Я работал над проектами с более чем 10k файлами в C/С++/fortran77/fortran90/python/Cython, включая документацию в doxygen/sphinx.

  • гибкость и легкость: вы можете добавить дополнительные модули en python (http://code.google.com/p/waf/wiki/AddingNewToolsToWaf)

  • быстро: задачи могут выполняться параллельно: http://www.retropaganda.info/~bohan/work/psycle/branches/bohan/wonderbuild/benchmarks/time.xml

  • multi plat-form: вы можете запустить Waf везде, где доступен python, включая Windows и MacOS. Waf совместим с mscvc, gcc, icc и другими компиляторами. Вы можете создавать проекты визуального/затмения.

... но у waf, похоже, проблема с llvm: http://code.google.com/p/waf/issues/detail?id=1252

EDIT: как сказал Войцех Данило, проблема LLVM исправлена.

Ответ 2

В настоящее время я использую CMake для реализации собственного языка через С++ 11 и LLVM.

Мне нравится CMake для его простого в использовании синтаксиса. LLVM может быть загружен с помощью простой команды load_package. После этого вы можете использовать все необходимые заголовки и библиотеки. CMake позволяет дочерним скриптам наследовать переменные из родительских скриптов. Поэтому вам не нужно устанавливать переменные и загружать пакеты в каждый подкаталог.

Поддержка С++ 11 зависит от вашего компилятора, который вы хотите использовать. В целом CMake - это всего лишь макет для создания вашей "реальной" сборки script.

Когда вы используете make, вы можете использовать make --jobs = N для ускорения компиляции на многоядерных платформах. В Windows вы можете создавать файлы проекта Visual Studio 2012 и использовать систему сборки Microsoft и использовать свои задания для ускорения процесса компиляции. Вы всегда должны создавать подпапку для файлов build (myproject/build или что-то еще). Таким образом, вы сохраняете исходное дерево чистым (cd build; cmake..; cd..).

Я не могу говорить обо всех других инструментах там.