Ответ 1
Нет правильного ответа на этот вопрос, и он обычно сводится к личным предпочтениям, вроде как vi против emacs (правильный ответ - vi, конечно:)
Вы должны изучить плюсы и минусы каждого и оценить, как они соответствуют вашим требованиям и потребностям.
Я частично отношусь к SCons, главным образом потому, что я не могу синтаксис CMake, но это личное предпочтение. Вот некоторые плюсы и минусы каждого, как я вижу:
CMake
Плюсы:
- Подобно QMake, учитывая, что это генератор makefile
- CMake широко используется, поэтому есть много ссылок и доступных справок.
- Имеет графический интерфейс (я сам не знаю его, основываясь на комментариях Calvin1602 ниже).
Минусы:
- У CMake есть свой собственный, изобретенный синтаксис, который многие считают (включенным мной) неинтуитивным.
- 2-этапный процесс сборки, сначала создайте Make файлы, а затем выполните компиляцию
- Невозможно прочитать сгенерированные Makefiles
SCons
Плюсы:
- Синтаксис - это Python, который широко используется и относительно легко учится. (и Python классно:)
- Процесс сборки - это один шаг, просто выполните SCons, и он скомпилируется. Нет промежуточных файлов сборки для создания или поддержки.
- В прошлом SCons был медленнее, чем CMake, но с тех пор он намного быстрее, вероятно, так же быстро или быстрее, чем CMake, поскольку он не должен генерировать make файлы.
- Богатый набор функций и поддержка многих языков, тогда как CMake ориентирован на C/С++
- Очень точная система неявных зависимостей: нет необходимости явно перечислять зависимые заголовки, библиотеки и т.д. При необходимости могут быть указаны явные зависимости.
- Доступен плагин eclipse. Eclipse также имеет плагины для Python.
- Были ли созданы инструменты для проектов Qt для обработки MOC и других связанных с ними кодегенов, как указано здесь.
Минусы:
- SCons не может быть так широко распространен, как CMake, но есть еще много поддержки.
- В зависимости от размера проекта, SCons может использовать много памяти, поскольку он анализирует все скрипты сборки и строит дерево зависимостей в памяти, прежде чем компилировать что-либо. Это позволяет, однако, более точно проверять зависимость.