Makefile.am और Makefile.in क्या हैं?


335

ये दोनों फाइलें ज्यादातर ओपन सोर्स प्रोजेक्ट्स में देखी जाती हैं।

वे किस लिए हैं, और कैसे काम करते हैं?

जवाबों:


381

Makefile.amएक प्रोग्रामर से परिभाषित फ़ाइल है और द्वारा किया जाता है automakeउत्पन्न करने के लिए Makefile.inफ़ाइल ( .amके लिए खड़ा है एक यूटो मीटर शॉट लें)। configureआम तौर पर स्रोत टारबॉल में देखी जाने वाली स्क्रिप्ट, Makefile.inउत्पन्न करने के लिए उपयोग करेगीMakefile

configureस्क्रिप्ट अपने आप में एक प्रोग्रामर से परिभाषित या तो नाम की फ़ाइल से उत्पन्न होता है configure.acया configure.in(बहिष्कृत)। मैं पसंद .ac(के लिए एक यूटो ONF) के बाद से यह उत्पन्न से अलग Makefile.inफ़ाइलों और इस तरह से मैं इस तरह के रूप नियम हो सकते हैं make dist-cleanजो रन rm -f *.in। चूंकि यह एक जेनरेट की गई फाइल है, इसलिए इसे आमतौर पर रीट्वेंट सिस्टम जैसे Git, SVN, Mercurial या CVS में स्टोर नहीं किया जाता है, बल्कि.ac फाइल होगी।

ग्नू ऑटोटूलस पर अधिक पढ़ें । के बारे में पढ़ें makeऔर Makefileपहली, तो के बारे में जानने automake, autoconf, libtool, आदि


3
किसलिए .inखड़ा है?
उत्कर्ष

10
.inविस्तार का मतलब है कि के लिए यह के इनपुट configureकी मालिश करने, कि इस्तेमाल किया जाना चाहिए नहीं एक अंतिम फ़ाइल (जैसे के साथ make)। यदि आप इस बारे में उत्सुक हैं कि यह "हास्यास्पद" जटिल क्यों लगता है, तो पढ़ने की कोशिश करें: stackoverflow.com/a/26832773/939557 इन दिनों GitHub, आदि के साथ एक आम वितरण चैनल बन रहा है ऑटोकॉन्फ़ की कुछ धारणाएं टूट रही हैं: लोग प्राप्त कर रहे हैं स्रोत कोड नियंत्रण उपकरण से सीधे स्रोत, बनाए रखने के द्वारा बनाए गए स्रोत वितरण टारबॉल का उपयोग करने के बजाय।
मैडिसिनिस्ट

53

सरल उदाहरण है

बेशर्मी से इसे अनुकूलित किया गया: 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.

configure.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

आप इसे बाहर की कोशिश करने के लिए GitHub पर


1
वीसीएस के तहत उत्पन्न फ़ाइलों को क्यों रखना चाहिए (यह न केवल बिट बीटीडब्ल्यू हो सकता है)?
विक्टर यारमा

@VictorYarema मैं भूल गया कि मैं उस नतीजे पर क्यों पहुँचा! अगर आपको पता चल जाए तो मुझे बताएं।
सिरो सेंटिल्ली 郝海东 冠状 iro i 法轮功 ''

19

डेवलपर चलाता है autoconfऔर automake:

1) ऑटोकॉन्फ़ - shippable कॉन्फ़िगर स्क्रिप्ट बनाता है
(जो इंस्टॉलर बाद में मेकफाइल बनाने के लिए चलेगा )

2) automake - शिप करने योग्य बनाता है Makefile.in डेटा फ़ाइल
(जो कॉन्फ़िगर बाद में होगा पढ़ बनाने के लिए Makefile )


INSTALLER चलता है configure, makeऔर sudo make install:

./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


INPUT / OUTPUT मैप

नीचे दी गई अधिसूचना मोटे तौर पर है: इनपुट -> प्रोग्राम -> आउटपुट

डेवलपर इनको चलाता है:

config.ac -> autoconf -> कॉन्फ़िगर (स्क्रिप्ट) --- (*। ac = a uto c onf) config.in -> autoconf -> कॉन्फ़िगर (स्क्रिप्ट) --- ( मूल्यह्रास। उपयोग config.ac )
configure.in

Makefile.am -> स्वचालित -> Makefile.in ----------- (*। Am = a uto m ake)

INSTALLER इन्हें चलाता है:

Makefile.in -> कॉन्फ़िगर -> Makefile (। * में = में डाल फाइल)

मेकफाइल -> मेक ----------> (आपके डाउनलोड या अस्थायी निर्देशिका में नया सॉफ्टवेयर डालता है)
मेकफाइल -> स्थापित करें -> (सिस्टम निर्देशिका में नया सॉफ़्टवेयर डालता है)


" ऑटोकॉनफ़ M4 मैक्रोज़ का एक एक्स्टेंसिबल पैकेज है, जो सॉफ्टवेयर स्रोत कोड पैकेज को स्वचालित रूप से कॉन्फ़िगर करने के लिए शेल स्क्रिप्ट का उत्पादन करता है। ये स्क्रिप्ट पैकेज को कई प्रकार के UNIX- जैसे सिस्टम को बिना मैन्युअल उपयोगकर्ता के हस्तक्षेप के अनुकूलित कर सकते हैं। Autoconf एक पैकेज से कॉन्फ़िगरेशन स्क्रिप्ट बनाता है। टेम्पलेट फ़ाइल जो ऑपरेटिंग सिस्टम को सूचीबद्ध करती है, जो कि पैकेज का उपयोग कर सकती है, M4 मैक्रो कॉल के रूप में। "

" ऑटोमेक जीएनयू कोडिंग मानकों के अनुरूप स्वचालित रूप से Makefile.in फ़ाइलों को जनरेट करने के लिए एक उपकरण है। ऑटोमेक को ऑटोकॉनफ के उपयोग की आवश्यकता होती है।"

नियमावली:

मुफ्त ऑनलाइन ट्यूटोरियल:


उदाहरण:

मुख्य configure.ac लिब्रे ऑफिस के निर्माण के लिए इस्तेमाल किया, कोड की 12k से अधिक लाइनों है (लेकिन वहां भी 57 सब-फ़ोल्डर के अन्य configure.ac फ़ाइलें हैं।)

इससे मेरा जेनरेट किया गया कॉन्फिगर कोड की 41k लाइन्स से अधिक है।

और जबकि Makefile.in और Makefile दोनों ही कोड की केवल 493 लाइनें हैं। (लेकिन, सबफ़ोल्डर्स में 768 से अधिक मेकफिल.इन भी हैं।)


16

संदर्भ :

Makefile.am - स्वचालित करने के लिए एक उपयोगकर्ता इनपुट फ़ाइल

config.in - एक यूजर इनपुट फाइल ऑटोकैफ के लिए


autoconf config.in से कॉन्फिगर करता है

Makefile.am से Makefile.in को स्वचालित करें

कॉन्फ़िगर Makefile.in Makefile.in से उत्पन्न करता है

पूर्व के लिए:

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

तो Makefile.in को जब आप डिस्टर्ब करते हैं, तो tar.gz फाइल में होना चाहिए?
केमिन झोउ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.