build — cmake vs waf для проекта C ++

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

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

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

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

Прочитав много статей, я узнал Cmake и выбрал «лучшие» доступные инструменты, но у меня нет опыта с ними, и очень трудно найти какое-либо сравнение, которое не очень пристрастно (например, сравнение автора scons) и не очень старый. действительно

12

Решение

Ваф покрывает почти все ваши требования …

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

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

  • гибкость и простота: вы можете добавлять дополнительные модули в 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 и MacO. Waf совместим с mscvc, gcc, icc и другими компиляторами. Вы можете создавать визуальные / затмения проектов.

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

РЕДАКТИРОВАТЬ: как сказал Войцех Данило, проблема LLVM была исправлена

14

Другие решения

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

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

Поддержка C ++ 11 зависит от вашего компилятора, который вы хотите использовать. В общем, CMake — это просто макет для создания вашего «реального» сценария сборки.

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

Я не могу говорить за все остальные инструменты там.

3