ما هي makefile.am و makefile.in؟
سؤال
يظهر هذان الملفان في الغالب في مشاريع مفتوحة المصدر.
ماذا هم ، وكيف يعملون؟
المحلول
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 في المجلدات الفرعية.)