ฉันมีโครงการที่ใช้ GNU autotools เพื่อสร้างตัวเอง ฉันกำลังพยายามแก้ไขเพื่อให้ autotools สร้างไฟล์ควบคุมที่ไม่ใช่เวอร์ชันทั้งหมดในไดเรกทอรีแยกต่างหากเพื่อที่ฉันจะสามารถรักษาต้นไม้ต้นกำเนิดให้สะอาดสำหรับไฟล์ชั่วคราว ใครมีความคิดวิธีการทำเช่นนี้?
ฉันมีโครงการที่ใช้ GNU autotools เพื่อสร้างตัวเอง ฉันกำลังพยายามแก้ไขเพื่อให้ autotools สร้างไฟล์ควบคุมที่ไม่ใช่เวอร์ชันทั้งหมดในไดเรกทอรีแยกต่างหากเพื่อที่ฉันจะสามารถรักษาต้นไม้ต้นกำเนิดให้สะอาดสำหรับไฟล์ชั่วคราว ใครมีความคิดวิธีการทำเช่นนี้?
คำตอบ:
แพ็คเกจ autotools นั้นมีเส้นทางและรหัสที่เข้ารหัสยากมากมายอยู่ในนั้นด้วยเหตุผลที่ดี เลือกที่ดีที่สุดของคุณคือการสรุปผลการส่งออกและแท็กพวกเขาเป็นไม่สนใจในการควบคุมการแก้ไขของคุณเช่นใน.cvsignore
, .hgignore
หรือเป็นsvn:ignore
attibute RCS บางตัวช่วยให้คุณสามารถระบุสัญลักษณ์แทนซ้ำได้
ตัวอย่างเช่นสิ่งนี้จะดึงข้อมูลและสร้าง GNU สวัสดีและตรวจสอบว่าต้นไม้ต้นกำเนิดไม่มีการเปลี่ยนแปลงเล็กน้อย
ส่วนนี้ดึงข้อมูลและเตรียมไดเรกทอรี
{
wget -S http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
tar zxvf hello-2.10.tar.gz
mv hello-2.10 hello-2.10-pristine
tar zxvf hello-2.10.tar.gz
diff -urq hello-2.10 hello-2.10-pristine && echo "Before build, directories are identical."
cd hello-2.10
}
ส่วนนี้สามารถใช้กับโครงการอื่น ๆ ที่ใช้ autoconf เพียง cd ลงในโครงการของคุณก่อนที่จะทำงาน ระวัง: สิ่งนี้จะวิ่งrm
ถ้าเล่นกับสายพันธุ์ระวังคุณจะต้องรับผิดชอบในทุกกรณี
export MYPREFIX="${PWD}.installtree"
(
set -eu # abort on error
ls configure # make sure it aborts if not in correct directory
export SRCTREE="${PWD}"
export BUILDTREE="${PWD}.buildtree"
rm -rf "$BUILDTREE" "$MYPREFIX"
mkdir "$BUILDTREE" "$MYPREFIX"
cd "$BUILDTREE"
"${SRCTREE}"/configure --prefix="${MYPREFIX?}"
time make -k || time make
time make install
)
สิ่งนี้จะตรวจสอบว่าบิลด์นั้นมีแหล่งกำเนิดที่สมบูรณ์
{
ls "$MYPREFIX"/bin/hello && echo "Okay, build generated the target."
cd "$MYPREFIX"/..
diff -urq hello-2.10 hello-2.10-pristine && echo "No change at all. Perfect out-of-source build success."
}
นี่มันเอาท์พุทนี้:
/tmp/hello-2.10.installtree/bin/hello
Okay, build generated the target.
No change at all. Perfect out-of-source build success.
--prefix="${MYPREFIX?}"
ส่วนดังกล่าวข้างต้นเป็นตัวเลือก อนุญาตให้ทำการ "ติดตั้ง" ที่อยู่ในบัญชีของคุณ หากคุณต้องการ "sudo ทำการติดตั้ง" แบบดั้งเดิมไปยังตำแหน่งทั่วทั้งระบบคุณสามารถลบ--prefix="${MYPREFIX?}"
ได้