Я нашел похожую тему: Каковы различия между Autotools, Cmake и Scons? , но мой вопрос немного другой, и я думаю, что ответы могут быть и другими.
Я нашел много статей, в которых говорится, что waf не установлен (изменения API), еще не готов к работе и т. Д. (Но всем этим статьям 2 или 3 года).
Какой из этих инструментов сборки следует использовать, если я хочу:
Прочитав много статей, я узнал Cmake и выбрал «лучшие» доступные инструменты, но у меня нет опыта с ними, и очень трудно найти какое-либо сравнение, которое не очень пристрастно (например, сравнение автора scons) и не очень старый. действительно
Ваф покрывает почти все ваши требования …
Изменение 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 была исправлена
В настоящее время я использую 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 ..).
Я не могу говорить за все остальные инструменты там.