Я ищу пользу и легкий в обслуживании портативная система сборки для проектов C++. Основные платформы должны включать Windows (Visual Studio 8 +) и Linux (gcc); Cygwin может быть преимуществом. Мы рассматриваем две основных возможности: CMake и Повышение. Затор. SCons может быть также опцией, но я еще не исследовал его. CMake и Повышение. Затор, кажется, имеет следующие черты:
CMake:
Повышение. Затор:
Каковы другие возможности и что действительно предпочтительно после опыта? Какие системы сборки могут создать решение на пути?
(-) требует наличия файла конфигурации в каждой папке проекта
Это неверно, вам просто нужно передать более крупные пути, например:
add_program(foo src/foo.cpp src/main.cpp)
Несколько замечаний по поводу Boost. Jam - во-первых, это не Boost.Jam - bjam сам по себе совершенно бесполезен, вы ищете Boost.Build, который представляет собой набор макросов Jam, которые делают bjam полезным.
Я работал с обоими, и должен признать, Boost.Build не подходит для каких-либо серьезных проектов, кроме самого Boost. Нужно найти библиотеку? Не можете найти заголовок? Не могу. Необходимо сделать что-то помимо простой сборки - и вы не представляете, как это сделать, поскольку документация BB ... Совершенно бесполезна и, возможно, покрывает 10% BB. Поэтому в большинстве случаев вам нужно задавать вопросы в списках рассылки BB и ...
Итак, если у вас есть сложный проект - и вам нужно сделать что-то большее, чем простая компиляция и компоновка, держитесь подальше от Boost.Build.
Итак, если вам нужна поддержка MSVC, я считаю, что сегодня CMake является единственно возможным выбором.
Я не говорю, что CMake - очень хорошая система, у нее много проблем, но это что-то в основном подходит для кроссплатформенной разработки (если вам нужна поддержка MSVC).
И если вас не волнует MSVC, и вы довольны MinGW ... взгляните также на автоинструменты.
Насчет Scons - это еще менее зрелый им CMake.
У меня был хороший опыт работы с premake4: http://industriousone.com/premake
Update
Мне все еще нравится premake, но, поработав с ним некоторое время, я чувствую себя обязанным перечислить некоторые недостатки, которые я обнаружил в нем: