Makefile.am এবং Makefile.in কী?


335

এই দুটি ফাইলই বেশিরভাগ ওপেন সোর্স প্রকল্পগুলিতে দেখা যায়।

তারা কীসের জন্য এবং তারা কীভাবে কাজ করবে?

উত্তর:


381

Makefile.amপ্রোগ্রামার-সংজ্ঞায়িত ফাইল এবং দ্বারা ব্যবহৃত হয় automakeজেনারেট করতে Makefile.inফাইল ( .amজন্য ব্রিদিং একটি uto মি Ake)। configureস্ক্রিপ্ট সাধারণত উৎস tarballs দেখা ব্যবহার করবে Makefile.inএকটি জেনারেট করতে Makefile

configureস্ক্রিপ্ট নিজেই একটি প্রোগ্রামার-সংজ্ঞায়িত পারেন নামে ফাইল থেকে উৎপন্ন হয় configure.acবা configure.in(থামানো হয়েছে)। আমি পছন্দ করি .ac( একটি ইউটো সি অন্ফের জন্য) যেহেতু এটি এটিকে উত্পন্ন Makefile.inফাইল থেকে পৃথক করে এবং সেভাবে আমার নিয়ম থাকতে পারে যেমন make dist-cleanকোনটি চালায় rm -f *.in। যেহেতু এটি একটি উত্পন্ন ফাইল, তাই এটি সাধারণত গিট, এসভিএন, মার্কিউরিয়াল বা সিভিএসের মতো কোনও সংশোধন সিস্টেমে সংরক্ষণ করা হয় না, বরং .acফাইলটি হবে।

জিএনইউ অটোটুলগুলিতে আরও পড়ুন । সম্পর্কে পড়ুন makeএবং Makefileপ্রথম, তারপর সম্পর্কে জানতে automake, autoconf, libtool, ইত্যাদি


3
কি .inদাঁড়াবে?
উত্কু

10
.inএক্সটেনশন মানে যে জন্য এটা ইনপুট configureম্যাসেজ, যে ব্যবহার করা উচিত না একটি চূড়ান্ত ফাইল (যেমন সঙ্গে make)। এটি কেন "হাস্যকরভাবে" জটিল বলে মনে হচ্ছে তা যদি আপনি জানতে আগ্রহী হন তবে পড়ার চেষ্টা করুন: স্ট্যাকওভারফ্লো.com/ a / 26832773 / 939557 আজকের দিনে গিটহাব ইত্যাদির সাথে একটি সাধারণ বিতরণ চ্যানেল হয়ে উঠছে অটোকনফের কিছু অনুমানগুলি ভেঙে যাচ্ছে: মানুষ প্রাপ্ত হচ্ছেন রক্ষণাবেক্ষণকারীদের দ্বারা তৈরি উত্স বিতরণ টারবাল ব্যবহার না করে সোর্স সোর্স কোড নিয়ন্ত্রণ সরঞ্জাম থেকে।
ম্যাড সায়েন্টিস্ট

53

সহজ উদাহরণ

নির্লজ্জভাবে: http://www.gnu.org/software/automake/manual/html_node/Creating-amhello.html থেকে অভিযোজিত এবং উবুন্টু 14.04 অটোমেক 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বেশ কয়েকটি টেম্পলেট ফাইল উত্পন্ন করে যা গিট সহ ট্র্যাক করা উচিত Makefile.in। এটি কেবল প্রথমবার চালানো দরকার।

  • make install ইনস্টল করা হয়:

    • বাইনারি যাও /usr/local/bin
    • README.md প্রতি /usr/local/share/doc/automake_hello_world

আপনার এটি চেষ্টা করার জন্য গিটহাব এ On


1
কেন একজনকে উত্পন্ন ফাইলগুলি ভিসিএসের অধীনে রাখা উচিত (এটি কেবল গিট বিটিডাব্লু হতে পারে না)?
ভিক্টর ইয়ারেমা

@ ভিক্টর ইয়ারেমা কেন ভুলে গেছি আমি কেন এই সিদ্ধান্তে পৌঁছেছি! আপনি যদি এটি জানতে চান।
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

19

ডেভেলপার চালায় autoconfএবং automake:

1) autoconf - shippable সৃষ্টি কনফিগার স্ক্রিপ্ট
(যা ইনস্টলার পরে হবে চালানোর করতে Makefile নামক )

2) automake - shippable সৃষ্টি Makefile.in তথ্য ফাইল
(যা কনফিগার পরে হবে পড়া করতে Makefile নামক )


ইনস্টলার রান 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


ইনপুট / আউটপুট ম্যাপ

নীচের স্বরলিপিটি মোটামুটি: ইনপুট -> প্রোগ্রাম -> আউটপুট

ডেভেলপার এগুলি চালায়:

configure.ac -> অটোকনফ -> কনফিগার (স্ক্রিপ্ট) --- (*। ac = a uto c onf)
configure.in -> অটোকনফ -> কনফিগার (স্ক্রিপ্ট) --- ( configure.inঅবহেলিত। কনফিগার.এ্যাক ব্যবহার করুন)

Makefile.am -> Automake -> Makefile.in ----------- (*। Am = a uto m ake)

ইনস্টলার এগুলি চালায়:

Makefile.in -> কনফিগার -> Makefile নামক (। * মধ্যে = মধ্যে করা ফাইল)

মেকফিল -> মেক ----------> (আপনার ডাউনলোড বা অস্থায়ী ডিরেক্টরিতে নতুন সফ্টওয়্যার রাখে)
মেকফিল -> ইনস্টল করুন -> (সিস্টেম ডিরেক্টরিতে নতুন সফ্টওয়্যার রাখে)


" অটোকনফ এম 4 ম্যাক্রোগুলির একটি এক্সটেনসিবল প্যাকেজ যা সফ্টওয়্যার উত্স কোড প্যাকেজগুলি স্বয়ংক্রিয়ভাবে কনফিগার করতে শেল স্ক্রিপ্টগুলি উত্পাদন করে These টেমপ্লেট ফাইল যা এম 4 ম্যাক্রো কল আকারে প্যাকেজটি ব্যবহার করতে পারে এমন অপারেটিং সিস্টেমের বৈশিষ্ট্যগুলি তালিকাভুক্ত করে। "

" Automake স্বয়ংক্রিয়ভাবে Makefile.in গনুহ স্ট্যান্ডার্ড কোডিং সঙ্গে সঙ্গতিশীল ফাইল জেনারেট করার জন্য একটি টুল। Automake Autoconf ব্যবহারের প্রয়োজন।"

সারগ্রন্থ:

বিনামূল্যে অনলাইন টিউটোরিয়াল:


উদাহরণ:

প্রধান configure.ac LibreOffice এর নির্মাণ করতে ব্যবহৃত, কোডের 12k উপর লাইন (কিন্তু এছাড়াও আছে 57 সাবফোল্ডার অন্যান্য configure.ac ফাইল।)

এটি থেকে আমার উত্পন্ন কনফিগারটি কোডের 41k লাইনের ওপরে।

এবং Makefile.in এবং Makefile উভয়ই কোডের 499 লাইন। (তবে সাবফোল্ডারগুলিতে আরও 768 টি Makefile.in রয়েছে।)


16

তথ্যসূত্র :

Makefile.am - স্বয়ংক্রিয় করতে একটি ব্যবহারকারী ইনপুট ফাইল

কনফিগার.ইন - অটোকনফ-এ একটি ব্যবহারকারী ইনপুট ফাইল


অটোকনফ কনফিগার.ইন থেকে কনফিগার করে

স্বয়ংক্রিয়ভাবে Makefile.am থেকে Makefile.in তৈরি করে

কনফিগার Makefile.in থেকে Makefile উত্পন্ন করে

প্রাক্তন হিসাবে:

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

সুতরাং Makefile.in যখন tar.Z ফাইলের মধ্যে থাকা উচিত, আপনি ঠিক দূরে তৈরি করেন?
কেমিন চিউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.