سؤال

يظهر هذان الملفان في الغالب في مشاريع مفتوحة المصدر.

ماذا هم ، وكيف يعملون؟

هل كانت مفيدة؟

المحلول

Makefile.am هو ملف محدد المبرمج ويتم استخدامه بواسطة automake لتوليد Makefile.in ملف ( .am تمثل أيوتومake). ال configure السيناريو الذي يظهر عادة في كرات القطران المصدر سوف يستخدم Makefile.in لتوليد أ Makefile.

ال configure النصي تم إنشاء نفسها من ملف محدد المبرمج اسمه أيضًا configure.ac أو configure.in (إهمال). أنا أفضل .acأيوتوجonf) لأنه يميزه عن المولد Makefile.in الملفات وبهذه الطريقة يمكنني الحصول على قواعد مثل make dist-clean الذي يعمل rm -f *.in. نظرًا لأنه ملف تم إنشاؤه ، فهو لا يتم تخزينه عادةً في نظام مراجعة مثل GIT أو SVN أو Mercurial أو CVS ، بدلاً من ذلك .ac سيكون الملف.

اقرأ المزيد على GNU Autotools. أقرأ عن make و Makefile أولا ، ثم تعرف على automake, autoconf, libtool, ، إلخ.

نصائح أخرى

مثال بسيط

مقتبس من: http://www.gnu.org/software/automake/manual/html_node/creating-amhello.html واختبارها على Ubuntu 14.04 Automake 1.14.1.

makefile.am

SUBDIRS = src
dist_doc_DATA = README.md

readme.md

Some doc.

Config.ac

AC_INIT([automake_hello_world], [1.0], [bug-automake@gnu.org])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
 Makefile
 src/Makefile
])
AC_OUTPUT

src/makefile.am

bin_PROGRAMS = autotools_hello_world
autotools_hello_world_SOURCES = main.c

SRC/MAIN.C

#include <config.h>
#include <stdio.h>

int main (void) {
  puts ("Hello world from " PACKAGE_STRING);
  return 0;
}

الاستخدام

autoreconf --install
mkdir build
cd build
../configure
make
sudo make install
autoconf_hello_world
sudo make uninstall

هذا المخرجات:

Hello world from automake_hello_world 1.0

ملاحظات

  • autoreconf --install يولد العديد من ملفات القالب التي يجب تتبعها بواسطة GIT ، بما في ذلك Makefile.in. يجب تشغيله فقط في المرة الأولى.

  • make install التثبيت:

    • الثنائي ل /usr/local/bin
    • README.md ل /usr/local/share/doc/automake_hello_world

على جيثب لكي تجربها.

المرجعي :

Makefile.am - ملف إدخال المستخدم إلى Automake

Config.in - ملف إدخال المستخدم إلى autoconf


AutoConf توليد التكوين من config.in

Automake Gererates Makefile.in من makefile.am

تكوين توليد makefile من makefile.in

لـ Ex:

$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ... 
$] sudo ./configure
Makefile Makefile.in

يدير المطور هذه:

1) autoconf - يخلق shippable تهيئة السيناريو (الذي سوف المثبت يركض لتصنع Makefile)
2) السيارات - يخلق shippable makefile.in (أيّ تهيئة ستؤدي لاحقا اقرأ لتصنع Makefile)

يقوم المثبت بتشغيل هذه:

./configure       # Creates  Makefile        (from     Makefile.in).  
make              # Creates  the application (from the Makefile just created).  

sudo make install # Installs the application 
                  #   Often, by default its files are installed into /usr/local

المدخلات -> البرامج -> المخرجات:

يدير المطور هذه:

config.in -> autoconf -> تهيئة (نص) --- (تكوين.في هو انخفاض. استخدم الآن config.ac)
config.ac -> autoconf -> تهيئة (النصي) --- (*.AC = أيوتوجonf)

makefile.am -> السيارات -> makefile.in ----------- (*.صباحا = أيوتومake)

يقوم المثبت بتشغيل هذه:

makefile.in -> تهيئة -> Makefile (*.في = فيوضع الملف)

Makefile -> صنع -> (البرنامج الجديد في التنزيلات أو الدليل المؤقت)
Makefile -> اجعل التثبيت -> (يضع برامج جديدة في دليل النظام)


"autoconf هي حزمة قابلة للتمديد من وحدات الماكرو M4 التي تنتج البرامج النصية Shell لتكوين حزم شفرة مصدر البرنامج تلقائيًا. يمكن لهذه البرامج النصية تكييف الحزم مع أنواع كثيرة من الأنظمة التي تشبه UNIX دون تدخل المستخدم اليدوي. يقوم AutoconF بإنشاء برنامج نصي للتكوين لحزمة من ملف قالب يسرد ميزات نظام التشغيل التي يمكن أن تستخدمها الحزمة ، في شكل مكالمات M4 Macro. "

"السيارات هي أداة لإنشاء ملفات Makefile.in تلقائيًا مع معايير ترميز GNU. تتطلب Automake استخدام AutoConf. "

كتيبات:


حقائق مثيرة للاهتمام:
الرئيسي Config.ac يستخدم لبناء libreoffice أكثر من 12 كيلو سطر من التعليمات البرمجية ، (ولكن هناك أيضًا 57 ملفات تكوين أخرى في المجلدات الفرعية.)
من هذا ولدي تهيئة أكثر من 41 كيلو كود.
بينما ال makefile.in و Makefile كلاهما فقط 493 سطر رمز.
(ولكن ، هناك أيضًا 768 Makefile.in في المجلدات الفرعية.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top