Які відмінності між Autotools, Cmake та Scons?
Які відмінності між Autotools, Cmake та Scons?
Відповіді:
По правді кажучи, єдиним справжнім «благодатним порятунком» Autotools є те, що саме цим користуються всі проекти GNU.
Проблеми з Autotools:
Це працює ... більшість часу ... це все, що можна сказати про Autotools. Це система, яка вирішує декілька проблем, які дійсно стосуються проекту GNU ... для їх базового, основного коду ланцюга інструментів. (Edit (05/24/2014): Слід зазначити , що цей типом занепокоєння є потенційно BAD речі , щоб турбуватися о- Heartbleed частково випливає з цього мислення і з правильними, сучасними системами, ви на самому справіне має жодного бізнесу, що займається великою частиною того, що виправляє Autotools. GNU, ймовірно, потрібно зробити чітке видалення кодової бази, зважаючи на те, що трапилося з Heartbleed) Ви можете використовувати його для того, щоб зробити свій проект, і це може добре працювати для невеликого проекту, який ви не очікуєте працювати ніде, крім Linux або де явно правильно працює ланцюжок інструментів GNU. Заява про те, що він «добре інтегрується з Linux», є досить сміливим твердженням і досить невірним . Він досить інтегрується з набором інструментів GNU і вирішує проблеми, які мають ІТ з поставленими цілями.
Це не означає, що з іншими варіантами, обговореними в потоці, тут немає проблем.
SCons - це більше заміна для Make / GMake / тощо. і виглядає досить приємно, усі речі враховуються ...
Приклади, наведені для CMake у цій темі, є дещо хибними.
Однак ...
По правді кажучи, ваші цілі повинні диктувати те, що ви обираєте тут.
Причин багато, багато проектів роблять qmake, Autotools тощо та переходять на CMake. Поки я можу очікувати, що проект на базі CMake або потрапить у ситуацію перехресного компіляції, або в налаштування VisualStudio, або потрібна лише невелика кількість очищення, оскільки проект не враховував лише частини Windows та OSX. до кодової бази. Я не можу чекати , що з в SCons основі project- , і я очікую , 1/3 - й або більш Autotools проекти отримали ТО неправильно , що не дозволяє це будівля прямо на будь-якому контексті , крім господаря будівлі одного або Scratchbox2 один.
Слід зробити важливе розмежування між тим, хто використовує інструменти. Cmake - це інструмент, який користувач повинен використовувати при складанні програмного забезпечення. Автоінструменти використовуються для генерування тарболу дистрибутива, який можна використовувати для складання програмного забезпечення, використовуючи лише стандартні інструменти, доступні в будь-якій сумісній системі SuS. Іншими словами, якщо ви встановлюєте програмне забезпечення з тарболу, який був побудований за допомогою автоінструментів, ви не використовуєте автоінструменти . З іншого боку, якщо ви встановлюєте програмне забезпечення , яке використовує CMake, то будуть з допомогою CMake і повинна встановити його для створення програмного забезпечення.
Переважній більшості користувачів не потрібно встановлювати автоматичні інструменти на свій ящик. Історично багато плутанини було спричинене тим, що багато розробників поширюють неправильно сформовані тарболи, які змушують користувача запускати autoconf для відновлення сценарію налаштування, і це помилка упаковки. Більшу плутанину викликало те, що більшість основних дистрибутивів Linux встановлюють кілька версій автоінструментів, коли вони не повинні встановлювати жодну з них за замовчуванням. Ще більше плутанини викликають розробники, які намагаються використовувати систему управління версіями (наприклад, cvs, git, svn) для розповсюдження свого програмного забезпечення, а не для створення тарболів.
asciidoc
або, help2man
або, doxygen
або, що важливо, правильна комбінація автоматичного інструменту. Це було величезною маркетинговою проблемою для автоінструментів. Користувачі помилково вважають, що їм потрібно встановити autoconf, оскільки вони не розуміють різниці між тарболом та VCS.
Мова не йде про стандарти кодування GNU.
Поточні переваги автоінструментів, особливо при автоматичному використанні, - це те, що вони дуже добре інтегруються в побудову дистрибутива Linux.
Наприклад, cmake, це завжди, "мені це було потрібне -DCMAKE_CFLAGS або -DCMAKE_C_FLAGS?" Ні, це ні, це "-DCMAKE_C_FLAGS_RELEASE". Або -DCMAKE_C_FLAGS_DEBUG. Це заплутано - в autoconf це просто ./configure CFLAGS = "- O0 -ggdb3" і у вас це є.
В інтеграції з інфраструктурою побудови, у scns виникає проблема, яку ви не можете використовувати make %{?_smp_mflags}
, _smp_mflags
у цьому випадку це макрос RPM, який приблизно розширюється до (системний адміністратор може встановити це). Люди розміщують такі речі, як -jNCPUS, через своє оточення. Якщо це не працює, то пакунки, що використовують scons, можуть мати серійний вбудований лише в дистрибутиві.
./configure CFLAGS=-O0
часто виходить з ладу пакунки, які перезаписують CFLAGS у makefile і вимагають замість цього користувача ./configure --enable-debug
. (наприклад tmux
).
Що важливо знати про Autotools, це те, що вони не є загальною системою збірки - вони реалізують стандарти кодування GNU і більше нічого. Якщо ви хочете зробити пакет, який відповідає всім стандартам GNU, то Autotools є прекрасним інструментом для роботи. Якщо ви цього не зробите, то вам слід скористатися Scons або CMake. (Наприклад, див. Це запитання .) Це поширене непорозуміння - це те, звідки походить більша частина розладів з Autotools.
AUTOMAKE_OPTIONS = -foreign
вашого Makefile.am
. (Або -foreign
по-вашому autogen.sh
. Я думаю, що майже всі користуються цим.)
installcheck
і distclean
. Якщо ви намагаєтесь змінити таку поведінку, використовуючи Autotools, ви просто витрачаєте свій час.
Хоча з точки зору розробників, cmake в даний час найбільш простий у використанні, з точки зору користувача автоінструменти мають одну велику перевагу
autotools генерують єдиний скрипт налаштування файлу, а всі файли для його створення поставляються разом з дистрибутивом. це легко зрозуміти і виправити за допомогою grep / sed / awk / vi. Порівняйте це з Cmake, де у файлах / usr / share / cmak * / / знайдено багато файлів, які користувач не може виправити, якщо у нього немає доступу адміністратора.
Отже, якщо щось не зовсім працює, його зазвичай можна легко "виправити", використовуючи інструменти Standard Unix (grep / sed / awk / vi тощо) кувалдою без необхідності розуміти систему складання.
Ви коли-небудь копалися через каталог cmake build, щоб з’ясувати, що не так? Порівнюючи з простими оболонками, які можна читати зверху вниз, слідуючи за створеними файлами Cmake, з’ясувати, що відбувається, досить складно. Крім того, за допомогою CMake для адаптації файлів FindFoo.cmake потрібні не тільки знання мови CMake, але й можуть знадобитися привілеї суперпользователя.