Makefile.am และ Makefile.in คืออะไร


คำตอบ:


381

Makefile.amเป็นไฟล์ที่โปรแกรมเมอร์กำหนดและถูกใช้automakeเพื่อสร้างMakefile.inไฟล์ ( .amย่อมาจากa uto m ake) configureสคริปต์มักจะเห็นใน tarballs แหล่งที่จะใช้ในการสร้างMakefile.inMakefile

configureสคริปต์ตัวเองจะถูกสร้างขึ้นจากไฟล์โปรแกรมเมอร์กำหนดชื่ออย่างใดอย่างหนึ่งconfigure.acหรือconfigure.in(เลิกใช้) ฉันชอบ.ac(สำหรับUto onf) เพราะมันแตกต่างจากที่สร้างไฟล์และวิธีการที่ฉันจะมีกฎระเบียบดังกล่าวเป็นที่วิ่ง เนื่องจากเป็นไฟล์ที่สร้างขึ้นโดยทั่วไปจะไม่ถูกจัดเก็บในระบบการแก้ไขเช่น Git, SVN, Mercurial หรือ CVS แทนที่จะเป็นไฟล์Makefile.inmake dist-cleanrm -f *.in.ac

อ่านเพิ่มเติมเกี่ยวกับGNU Autotools อ่านเกี่ยวกับmakeและMakefileก่อนแล้วเรียนรู้เกี่ยวกับautomake, autoconf, libtoolฯลฯ


3
อะไรที่.inยืนหยัด?
Utku

10
.inขยายหมายความว่าป้อนข้อมูลสำหรับconfigureการนวดไม่ได้เป็นไฟล์สุดท้ายที่ควรจะใช้ (เช่นกับmake) หากคุณสงสัยว่าทำไมสิ่งนี้จึงดู "ขันแข็ง" ลองอ่าน: stackoverflow.com/a/26832773/939557 ทุกวันนี้ด้วย GitHub ฯลฯ กลายเป็นช่องทางการกระจายทั่วไปของสมมติฐานของ autoconf: ผู้คนได้รับ ซอร์สโดยตรงจากเครื่องมือควบคุมซอร์สโค้ดแทนที่จะใช้ tarball แจกจ่ายซอร์สที่สร้างโดยผู้ดูแล
MadScientist

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
เหตุใดจึงควรเก็บไฟล์ที่สร้างขึ้นภายใต้ VCS (นี้อาจไม่เพียง แต่ Git BTW)?
Victor Yarema

@VictorYarema ฉันลืมทำไมฉันถึงได้ข้อสรุป! แจ้งให้เราทราบหากคุณพบ
Ciro Santilli 郝海东冠状病六四事件法轮功

19

นักพัฒนารันautoconfและautomake:

1) autoconf - สร้างสคริปต์กำหนดค่า shippable
(ซึ่งผู้ติดตั้งจะรันในภายหลังเพื่อสร้างMakefile )

2) automake - สร้าง shippable 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

สัญกรณ์ด้านล่างเป็นคร่าวๆ:อินพุต -> โปรแกรม -> เอาท์พุท

ผู้พัฒนาใช้งานสิ่งเหล่านี้:

configure.ac -> autoconf -> configure (script) --- (*. ac = a uto c onf)
configure.in -> autoconf -> กำหนดค่า (สคริปต์) --- ( configure.inคิดค่าเสื่อมราคาใช้ configure.ac)

Makefile.am -> automake -> Makefile.in ----------- (*. am = a uto m ake)

INSTALLER เรียกใช้สิ่งเหล่านี้:

Makefile.in -> configure -> Makefile (*. in = in put file)

Makefile -> make ----------> (ใส่ซอฟต์แวร์ใหม่ในการดาวน์โหลดหรือไดเรกทอรีชั่วคราว)
Makefile ->ทำการติดตั้ง -> (ใส่ซอฟต์แวร์ใหม่ในไดเรกทอรีระบบ)


" autoconfเป็นแพคเกจที่ขยายได้ของมาโคร M4 ที่สร้างเชลล์สคริปต์เพื่อกำหนดค่าซอร์สโค้ดซอฟต์แวร์โดยอัตโนมัติสคริปต์เหล่านี้สามารถปรับแพคเกจให้เข้ากับระบบที่คล้าย UNIX หลายประเภทโดยไม่มีการแทรกแซงจากผู้ใช้ด้วยตนเอง Autoconf สร้างสคริปต์กำหนดค่าสำหรับแพ็คเกจจาก ไฟล์แม่แบบที่แสดงคุณสมบัติระบบปฏิบัติการที่แพ็คเกจสามารถใช้ในรูปแบบของการเรียกแมโคร M4

" automakeเป็นเครื่องมือสำหรับสร้างไฟล์ Makefile.in โดยอัตโนมัติตามมาตรฐานการเข้ารหัสของ GNU Automake ต้องการการใช้ Autoconf โดยอัตโนมัติ"

คู่มือการใช้งาน:

บทเรียนออนไลน์ฟรี:


ตัวอย่าง:

หลักconfigure.acใช้ในการสร้าง LibreOffice มีมากกว่า 12k สายรหัส ( แต่ยังมี 57 ไฟล์ configure.ac อื่น ๆ ในโฟลเดอร์ย่อย.)

จากการกำหนดค่าที่ฉันสร้างขึ้นนี้มีรหัสมากกว่า 41k บรรทัด

และในขณะที่Makefile.inและMakefileล้วนมีโค้ดเพียง 493 บรรทัด (แต่ยังมี Makefile.in อีก 768 อันในโฟลเดอร์ย่อย)


16

การอ้างอิง :

Makefile.am - ไฟล์อินพุตของผู้ใช้เพื่อทำให้เป็นอัตโนมัติ

configure.in - ไฟล์อินพุตผู้ใช้เป็น autoconf


autoconf สร้างการกำหนดค่าจาก configure.in

automake gererates Makefile.in จาก Makefile.am

กำหนดค่าสร้าง Makefile จาก Makefile.in

ตัวอย่างเช่น:

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

ดังนั้น Makefile.in ควรอยู่ในไฟล์ tar.gz เมื่อคุณแยกจากกันใช่ไหม?
Kemin Zhou
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.