สองไฟล์เหล่านี้ส่วนใหญ่จะเห็นในโครงการโอเพนซอร์ส
มีไว้เพื่ออะไรและทำงานอย่างไร
สองไฟล์เหล่านี้ส่วนใหญ่จะเห็นในโครงการโอเพนซอร์ส
มีไว้เพื่ออะไรและทำงานอย่างไร
คำตอบ:
Makefile.am
เป็นไฟล์ที่โปรแกรมเมอร์กำหนดและถูกใช้automake
เพื่อสร้างMakefile.in
ไฟล์ ( .am
ย่อมาจากa uto m ake) configure
สคริปต์มักจะเห็นใน tarballs แหล่งที่จะใช้ในการสร้างMakefile.in
Makefile
configure
สคริปต์ตัวเองจะถูกสร้างขึ้นจากไฟล์โปรแกรมเมอร์กำหนดชื่ออย่างใดอย่างหนึ่งconfigure.ac
หรือconfigure.in
(เลิกใช้) ฉันชอบ.ac
(สำหรับUto ค onf) เพราะมันแตกต่างจากที่สร้างไฟล์และวิธีการที่ฉันจะมีกฎระเบียบดังกล่าวเป็นที่วิ่ง เนื่องจากเป็นไฟล์ที่สร้างขึ้นโดยทั่วไปจะไม่ถูกจัดเก็บในระบบการแก้ไขเช่น Git, SVN, Mercurial หรือ CVS แทนที่จะเป็นไฟล์Makefile.in
make dist-clean
rm -f *.in
.ac
อ่านเพิ่มเติมเกี่ยวกับGNU Autotools อ่านเกี่ยวกับmake
และMakefile
ก่อนแล้วเรียนรู้เกี่ยวกับautomake
, autoconf
, libtool
ฯลฯ
.in
ขยายหมายความว่าป้อนข้อมูลสำหรับconfigure
การนวดไม่ได้เป็นไฟล์สุดท้ายที่ควรจะใช้ (เช่นกับmake
) หากคุณสงสัยว่าทำไมสิ่งนี้จึงดู "ขันแข็ง" ลองอ่าน: stackoverflow.com/a/26832773/939557 ทุกวันนี้ด้วย GitHub ฯลฯ กลายเป็นช่องทางการกระจายทั่วไปของสมมติฐานของ autoconf: ผู้คนได้รับ ซอร์สโดยตรงจากเครื่องมือควบคุมซอร์สโค้ดแทนที่จะใช้ tarball แจกจ่ายซอร์สที่สร้างโดยผู้ดูแล
ตัวอย่างง่ายๆ
ดัดแปลงมาจาก: 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เพื่อให้คุณทดลองใช้
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 -> 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 อันในโฟลเดอร์ย่อย)
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
.in
ยืนหยัด?