Похоже, что это (все еще) ошибка, но работа была начата сегодня.
Если вы хотите решить эту проблему, вот отчет об ошибке: https://community.openproject.com/projects/openproject/work_packages/29523/activity
Мне нравится SCons. Это создается таким способом который каждый сценарий сборки (a SConstruct
файл), также синтаксически действительная программа Python. Так, можно встроить произвольную логику Python в сценарий сборки, если Вы должны.
Это также намного быстрее, чем make
и вычисляет много видов зависимостей автоматически.
Мой первый вопрос был бы, какова аудитория. Это для создания программного обеспечения для внутреннего пользования, которое только создаст Ваша команда? Если так, исследуйте некоторые опции, уже представленные. Если это - что-то, что будут создавать другие, или палка с делают или используют инструмент, который создает make-файл, и поставьте их. Мы используем autoconf и автоделаем для Linux и других платформ Unix. По-моему, Вам нужно очень серьезное основание сделать что-то другое, чем настраивают; сделайте; сделайте установку. Повышение имеет их собственный инструмент (измененная версия Затора), и это раздражает меня каждый раз, что я должен попытаться заставить это компилировать на необычной машине.
cmake и imake являются оба утилитами сборки, хотя Imake больше не сохраняется. Cmake является также межплатформенным и может использоваться в Windows также.
Если Вы в Java, МУРАВЕЙ является инструментом сборки, связал с Java (который действительно не играет приятно с, Делают).
Технология сообщения-розыгрыша делает инструмент названным qmake, который они используют для создания QT. Это работает путем генерации make-файлов - Сообщению-розыгрышу был нужен инструмент для поддержки межплатформенной сборки - таким образом, Вам все еще нужно, другой делает утилиту.
Автосделайте :p который является наиболее часто используемым в большинстве распределений приложений Linux, но это дает немного больше работы, чем Make-файл, но лучшие результаты http://www.gnu.org/software/automake/
http://www.openismus.com/documents/linux/automake/automake.shtml <-хорошее объяснение о том, как использовать, автоделает и autoconf
Если Вы ищете что-то совершенно другое, существует Муравей. Я не то, который заинтересовал им сам, но это действительно предлагает некоторые преимущества мобильности (никакая уверенность в оболочке Unix, и т.д.)
OMake является инструментом сборки для C/C++, OCaml и ЛАТЕКСА с автоматическим анализом зависимости. Это легко может разработать проекты по нескольким каталогам, и это находит изменения на основе суммы MD5, а не метки времени. Это также имеет режим, куда это может быть выполнено в фоновом режиме, разработав Ваш проект каждый раз, когда файл изменяется. Обычно требуется меньше кода для создания общих видов проектов (C/C++ или программы OCaml и библиотеки), чем делают, делает. Я не попробовал его за большие проекты.
Обратите внимание, что, если Вы хотите программировать в OCaml, этот инструмент действительно полезен, так как компоновщик OCaml требует, чтобы скомпилированные модули появились на командной строке в порядке зависимости, и выясняющий этот порядок каждый раз, когда что-то изменяется, нетривиально.
Я использовал CMake для большего количества своих проектов, включая портирование некоторых основанных на автоинструментах, и я могу сказать, что это делает свое задание очень хорошо. Это главным образом подходит для C/C++ кросс-платформенные проекты.
Проект я продолжаю работать, наследовал некоторый код, который использует Cons
вместо Make
(не к запутанному с SCons
в ответе Greg Hewgill).
Cons
записан в Perl, во многом как SCons
записан в Python. Это управляет зависимостями автоматически, и можно использовать любой код Perl в сценарии сборки для обработки сложных последовательностей сборки.
Основной недостаток (и главная причина, я сожалею свой проект, использует его) является этим Cons
не делает параллельных сборок в стиле make -j
. Если Вы компилируете много файлов, которые не зависят друг от друга Cons
скомпилирует их по одному, в то время как make -j
скомпилирует их параллельно, который является большим, если у Вас есть несколько ядер и потоков на Вашей машине.