Ответ 1
Google V8 JavaScript Engine написан на С++ и использует SCons, поэтому я думаю, что один голос за него.
Мне интересно, есть ли хороший и аккуратный инструмент для замены GNU Autotools или Make для создания очень большого проекта на С++, который является такой сложной задачей.
Простое создание всех файлов, требуемых Autotools, если проект мал, но если исходный код разделен во многих каталогах, с несколькими сторонними библиотеками и многими зависимостями, вы попадаете в "Autotools Hell"..
спасибо за любые рекомендации
Google V8 JavaScript Engine написан на С++ и использует SCons, поэтому я думаю, что один голос за него.
CMake? (генерирует make файлы, поэтому технически это не замена как таковая).
Я также заметил, что " SCons" появилось недавно в нескольких местах. Я ничего не создал с собой.
Взгляните на waf.
Я думаю, вы можете считать его полной заменой make и autotools. Он основан на python. Одна вещь, которая мне нравится в waf, заключается в том, что сам waf script составляет ~ 100 КБ автономно, что вы помещаете в корневой каталог проекта. Это в отличие от make или rake и друзей, где сначала должна быть установлена система сборки. У вас должен быть установлен python >= 2.3.
~$ ./waf configure && ./waf && ./waf install
Вафф-эквивалент Make файлов - это файл wscript. Это python script waf читает, и он определяет не менее 3 функций: set_options()
, configure(conf)
и build(bld)
. Вы можете догадаться, что делает каждый из них.
Чтобы начать сканирование, я рекомендую посмотреть в файлах demos/cpp/* в исходном дистрибутиве. Также посмотрите файл doc/waf.pdf; это 12-страничный документ, который быстро запустит вас.
Для сравнения скорости различных инструментов сборки С++ вы можете ознакомиться с этим эталоном: http://retropaganda.info/~bohan/work/sf/psycle/branches/bohan/wonderbuild/benchmarks/time.xml
Мы используем Jam для сложного проекта на С++ - одно из преимуществ заключается в том, что это хорошо перекрестная платформа. Вместо того, чтобы меня извлекать выгоду, просто взгляните на эту ссылку: http://www.perforce.com/jam/jam.html
Ноэль Ллопис написал несколько статей, сравнивающих системы сборки. Часть 1 "Поиски совершенной системы сборки" находится в http://gamesfromwithin.com/the-quest-for-the-perfect-build-system. Часть 2 следует на том же сайте. Повтор Scons сообщается в http://gamesfromwithin.com/?p=104.
Выводы: SCons слишком медленный... Побеждает побег.
Cook - еще один инструмент, который можно использовать для замены make. Я видел несколько крупных компаний, использующих его. Таким образом, он готов к работе, хотя веб-сайт выглядит довольно устаревшим.
У меня есть SCons на большом проекте С++ (как на Linux, так и на Windows), и он работает очень хорошо.
scons all -j8
(который компилирует объектные файлы параллельно) очень круто!
Я использую bakefile для моего процесса сборки, и я стал большим поклонником!
Мне больше не нужно писать Makefile, не говоря уже о ужасных сценариях GNU autotools. Все, что мне нужно сделать, это предоставить файл XML
, который описывает цели сборки. Bakefile может преобразовать это в Makefile, который получает все зависимые (заголовочный файл) права и т.д., Где могут быть выбраны разные форматы Makefile (вставка списка из документации):
available formats are:
autoconf GNU autoconf Makefile.in files
borland Borland C/C++ makefiles
dmars Digital Mars makefiles
dmars_smake Digital Mars makefiles for SMAKE
gnu GNU toolchain makefiles (Unix)
mingw MinGW makefiles (mingw32-make)
msevc4prj MS eMbedded Visual C++ 4 project files
msvc MS Visual C++ nmake makefiles
msvc6prj MS Visual C++ 6.0 project files
msvs2003prj MS Visual Studio 2003 project files
msvs2005prj MS Visual Studio 2005 project files
symbian Symbian development files
watcom OpenWatcom makefiles
xcode2 Xcode 2.4 project files
Обычно я использую параметр autoconf, и он пишет для меня раздражающие скрипты GNU autotools. Мне пришлось адаптировать configure.ac
script, так что configure находит определенную библиотеку в любой системе. Но это было не так уж плохо. Получение сценариев autoconf таким образом является приятным, потому что мне не нужно писать их самостоятельно, и когда я распространю свой проект, он будет выглядеть так, как если бы я их написал, а пользователи все равно могут создать мой проект в божественном стиле, учитывая, что
./configure && make && make install