ภาษาอังกฤษภาษาฝรั่งเศสสเปน

Ad


ไอคอน Fav ของ OnWorks

makepp_extending - ออนไลน์ในคลาวด์

เรียกใช้ makepp_extending ในผู้ให้บริการโฮสต์ฟรีของ OnWorks ผ่าน Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS

นี่คือคำสั่ง makepp_extending ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS

โครงการ:

ชื่อ


makepp_extending -- วิธีขยาย makepp โดยใช้ Perl

DESCRIPTION


Makepp ภายในมีความยืดหยุ่นเพียงพอที่จะเขียนโค้ด Perl เล็กน้อยได้
เพิ่มฟังก์ชันหรือดำเนินการอื่น ๆ จำนวนหนึ่ง

General บันทึก on การเขียน Perl รหัส ไปยัง งาน กับ แต่งหน้า
makefile แต่ละอันอยู่ในแพ็คเกจของตัวเอง ดังนั้นคำจำกัดความใน makefile เดียวจึงไม่ส่งผลกระทบ
คำจำกัดความใน makefile อื่น ชุดฟังก์ชันทั่วไปรวมถึงมาตรฐานทั้งหมด
ฟังก์ชันการจัดการข้อความจะถูกนำเข้ามาในแพ็คเกจเมื่อถูกสร้างขึ้น

ตัวแปร Makefile จะถูกเก็บไว้เป็น Perl สเกลาร์ในแพ็คเกจนั้น (มีข้อยกเว้นสำหรับ
นี่: ตัวแปรอัตโนมัติและค่าเริ่มต้นของตัวแปรเช่น CC เป็นจริง
ใช้เป็นฟังก์ชันโดยไม่มีข้อโต้แย้ง กำหนดเป้าหมาย vars เฉพาะ บรรทัดคำสั่ง vars และ
vars ของสภาพแวดล้อมจะไม่ปรากฏในลักษณะนี้) ดังนั้นโค้ด Perl ใดๆ ที่คุณเขียนจะมีสิทธิ์เข้าถึงทั้งหมด
ตัวแปร makefile ตัวแปรส่วนกลางถูกเก็บไว้ในแพ็คเกจ "Mpp::global" ดู
ตัวแปร Makefile สำหรับรายละเอียด

แต่ละคำสั่ง (ifperl / ifmakeperl, perl / makeperl, sub / makesub), the
ฟังก์ชั่น (perl / makeperl, map / makemap) และการดำเนินการของกฎ (perl / makeperl) สำหรับ
การเขียนโค้ด Perl โดยตรงใน makefile มีสองรสชาติ อย่างแรกเลย
Perl ปกติ หมายความว่าคุณต้องใช้คำนำหน้า "f_" ตามที่อธิบายไว้ในส่วนถัดไป if
คุณต้องการเรียกใช้ฟังก์ชัน makepp ตัวแปรที่สองก่อนอื่นส่งคำสั่งผ่าน
การขยายตัวแปร Make-style หมายความว่าคุณต้องเพิ่ม "$" เป็นสองเท่าที่คุณต้องการให้ Perl เห็น

การจัดการขั้นสุดท้ายนั้นพิเศษเพราะข้อมูลขนาดใหญ่ของ makepp (ขึ้นอยู่กับระบบบิลด์ของคุณ)
โครงสร้างจะใช้เวลาหลายวินาทีในการรวบรวมขยะด้วยทางออกปกติ ดังนั้นเราจึงทำ
ออกกำลังดุร้าย ในกระบวนการหลัก คุณยังสามารถมีบล็อค "END" ได้ แต่ถ้าคุณมี
ตัวจัดการไฟล์ทั่วโลกอาจไม่ถูกล้าง แต่ควรใช้ศัพท์สมัยใหม่
filehandles ซึ่งปิดอย่างถูกต้องเมื่ออยู่นอกขอบเขต

ในโค้ด Perl ทำงานโดยตรงเป็นการดำเนินการของกฎหรือผ่านคำสั่งที่คุณกำหนด มันคือ
ตรงข้าม. บล็อก "END" จะไม่ถูกเรียกใช้ แต่ตัวจัดการไฟล์ทั่วโลกจะล้างข้อมูลให้คุณ NS
"DESTROY" ของวัตถุทั่วโลกจะไม่มีวันถูกเรียกใช้

เพิ่ม ใหม่ เกี่ยวกับใจความ ฟังก์ชั่น
คุณสามารถเพิ่มฟังก์ชันใหม่ให้กับละครของ makepp โดยเพียงแค่กำหนดรูทีนย่อย Perl ของ
ชื่อเดียวกันแต่ขึ้นต้นด้วย "f_" ตัวอย่างเช่น:

ย่อย f_myfunc {
$argument ของฉัน = &arg; # ตั้งชื่ออาร์กิวเมนต์
ของฉัน ( undef, $mkfile, $mkfile_line ) = @_; # ตั้งชื่ออาร์กิวเมนต์

... ทำอะไรที่นี่

คืนค่า $return_value;
}

XYZ := $(myfunc ข้อโต้แย้ง func ของฉัน)

ถ้าฟังก์ชันของคุณไม่มีอาร์กิวเมนต์ ก็ไม่ต้องทำอะไร ถ้าหน้าที่ของคุณรับหนึ่ง
อาร์กิวเมนต์ ดังในตัวอย่างข้างต้น ใช้ accessor &arg แบบง่ายเพื่อรับมัน ถ้าคุณ
คาดว่าจะมีอาร์กิวเมนต์มากขึ้น คุณต้องมีตัวเข้าถึง "args" ที่ซับซ้อนมากขึ้นตามที่อธิบายไว้ด้านล่าง

ตัวเข้าถึงเหล่านี้ประมวลผลสามพารามิเตอร์เดียวกันที่ควรส่งผ่านไปยัง "f_"
ฟังก์ชัน ได้แก่ อาร์กิวเมนต์ของฟังก์ชัน อ็อบเจ็กต์ makefile และตัวอธิบายบรรทัดสำหรับ
ข้อความ ดังนั้นคุณสามารถใช้แบบฟอร์ม &arg ที่มีประสิทธิภาพในกรณีแรก

ตัวเข้าถึง &arg จะดูแลสิ่งต่อไปนี้ให้คุณ: หากข้อโต้แย้งมีอยู่แล้ว
ขยาย (เช่นเพื่อค้นหาชื่อของฟังก์ชันใน "$(my$(ฟังก์ชัน) หาเรื่อง)" หาเรื่องคือ
ผ่านไปเป็นสตริงและเพิ่งกลับมา หากอาร์กิวเมนต์ยังคงต้องการขยาย นี่คือ
กรณีปกติ จะเป็นการอ้างอิงถึงสตริงแทน &arg accessor ขยายขอบเขตให้คุณ
ซึ่งต้องการวัตถุ makefile เป็นพารามิเตอร์ตัวที่ 2

หากคุณคาดหวังอาร์กิวเมนต์เพิ่มเติม อาจเป็นตัวเลขตัวแปร งานจะดำเนินการโดย "args"
ตัวเข้าถึงนี้ใช้พารามิเตอร์ 3 ตัวเหมือนกับ arg บวกกับพารามิเตอร์เพิ่มเติม:

สูงสุด: จำนวน args (ค่าเริ่มต้น 2): ให้ ~0 (สูงสุด) สำหรับไม่มีที่สิ้นสุด
min: จำนวน args (ค่าเริ่มต้น 0 ถ้า max เป็น ~0, อื่นเหมือนกับ max)
only_comma: อย่ากินพื้นที่รอบเครื่องหมายจุลภาค ปกติสำหรับผู้ที่ไม่ใช่ชื่อไฟล์

สูงสุด แต่อย่างน้อยมีเครื่องหมายจุลภาคขั้นต่ำก่อนที่จะใช้การขยายเพื่อแยก
อาร์กิวเมนต์ ตัวอย่างบางส่วนจากฟังก์ชันบิวด์อินของ makepp:

my( $prefix, $text ) = หาเรื่อง $_[0], $_[1], $_[2], 2, 2, 1; #เพิ่มคำนำหน้า
สำหรับ $cond ของฉัน ( args $_[0], undef, $_[2], ~0 ) ... # และหรือ
my @args= args $_[0], $_[1], $_[2], ~0, 1, 1; # เรียก
ของฉัน ( $filters, $words ) = args $_[0], $_[1], $_[2]; # กรอง

ฟังก์ชันควรส่งคืนสตริงสเกลาร์ (ไม่ใช่อาร์เรย์) ซึ่งจะถูกแทรกลงใน
ข้อความ ณ จุดนั้น

หากฟังก์ชันของคุณพบข้อผิดพลาด ฟังก์ชันควรตายโดยใช้คำสั่ง Perl die ปกติ
นี่จะถูกดักโดย makepp และข้อความแสดงข้อผิดพลาดที่แสดงชื่อไฟล์และบรรทัด
จำนวนของนิพจน์ที่ทำให้เกิดข้อผิดพลาดจะถูกพิมพ์ออกมา

โดยพื้นฐานแล้วไม่มีข้อจำกัดในสิ่งที่ฟังก์ชันสามารถทำได้ คุณสามารถเข้าถึงไฟล์ได้ เรียกใช้
คำสั่งเชลล์ ฯลฯ

ในปัจจุบัน นิพจน์ที่ปรากฏในการขึ้นต่อกันและในการดำเนินการของกฎถูกขยาย
หนึ่งครั้งในขณะที่นิพจน์ที่ปรากฏในเป้าหมายถูกขยายสองครั้ง ดังนั้นควรระมัดระวังหากคุณ
ฟังก์ชันมีผลข้างเคียงและมีอยู่ในนิพจน์สำหรับเป้าหมาย

โปรดทราบว่าสภาพแวดล้อม (โดยเฉพาะ cwd) ที่ฟังก์ชันประเมิน will
ไม่จำเป็นต้องตรงกับสภาพแวดล้อมที่กฎจาก Makefile ซึ่ง
ฟังก์ชั่นได้รับการประเมินแล้ว หากนี่คือปัญหาสำหรับคุณ แสดงว่าหน้าที่ของคุณ
น่าจะมีลักษณะดังนี้:

ย่อย f_foo {
...
chdir $makefile->{CWD};

... ฯลฯ
}

วาง ฟังก์ชั่น เข้าไป a Perl โมดูล
หากคุณใส่ฟังก์ชันลงในไฟล์รวม คุณจะมีหนึ่งสำเนาต่อ Makeppfile ซึ่ง
ใช้มัน เพื่อหลีกเลี่ยงปัญหาดังกล่าว คุณสามารถเขียนเป็นโมดูล Perl ปกติด้วย "ผู้ส่งออก"
ส่วนต่อประสานและใช้งานสิ่งนั้น ซึ่งจะโหลดเร็วขึ้นและประหยัดหน่วยความจำ:

perl { ใช้ mymodule }
เพิร์ล {
ใช้ my::module; # ใส่ : ขึ้นบรรทัดใหม่เพื่อไม่ให้แยกวิเคราะห์ตามกฎ
}

หากคุณต้องการฟังก์ชันใด ๆ ที่ปกติมีอยู่ใน Makefile (เช่น "f_"
ฟังก์ชั่น "arg" หรือ "args") คุณต้องใส่บรรทัดนี้ลงในโมดูลของคุณ:

ใช้ Mpp::Subs;

ข้อเสียคือโมดูลจะอยู่ในแพ็คเกจที่แตกต่างจากฟังก์ชั่นโดยตรง
ปรากฏใน makefile ดังนั้นคุณต้องส่งผ่านทุกอย่างเป็นพารามิเตอร์หรือสร้าง
ชื่อที่มีฟังก์ชัน "ผู้โทร" ของ Perl

การเรียกร้อง ภายนอก Perl สคริปต์
หากคุณเรียกใช้สคริปต์ Perl ภายนอกผ่าน "ระบบ" หรือดำเนินการตามกฎ makepp จะแยก a
กระบวนการใหม่ (เว้นแต่จะเป็นการดำเนินการตามกฎสุดท้าย) และไล่ล่าม Perl ใหม่เอี่ยม
ไม่มีอะไรผิดปกติ ยกเว้นว่ามีวิธีที่มีประสิทธิภาพมากกว่า:

&คำสั่ง ข้อโต้แย้ง...
นี่อาจเป็นการดำเนินการตามกฎ มันจะเรียกฟังก์ชัน คำสั่ง ด้วยคำนำหน้า "c_" และ
ส่งต่อส่วนที่เหลือ (รูปแบบ makepp ที่ยกมาทางเลือก -- ไม่เหมือนกับ
เชลล์) อาร์กิวเมนต์ หากไม่พบฟังก์ชันดังกล่าว ฟังก์ชันนี้จะส่งผ่านสตริงทั้งหมดไปที่
"วิ่ง".

ย่อย c_mycmd { @args ของฉัน = @_; ... }

$(โทรปลอมcmd):
&mycmd 'arg with space' arg2 "arg3" # โทร c_mycmd

%.ออก: %.in
&myscript -o $(output) $(input) # โทรภายนอก myscript

คุณสามารถเขียนคำสั่งของคุณภายในเฟรมเวิร์กของบิวด์อิน เพื่อให้คุณใช้งาน
ตัวเลือกมาตรฐานเดียวกันกับที่มี และการจัดการ I/O ที่ให้

ตัวดำเนินการบล็อก "Mpp::Cmds::frame" ตามด้วยรายการตัวเลือกตัวอักษรเดียวของ
บิลด์อิน (สูงสุด "qw(fi I ​​o O rs)") แม้ว่าคุณจะระบุตัวเลือกของคุณเอง
แทนที่หนึ่งในเหล่านี้ คุณยังคงให้ตัวอักษรตัวเดียวของตัวเลือกมาตรฐาน

แต่ละตัวเลือกของตัวเองถูกระบุเป็น "[qw(n name), \$อ้างอิง หาเรื่อง ย่อย]". สองคนแรก
อิลิเมนต์เป็นชื่อสั้นและยาว ตามด้วยการอ้างอิงตัวแปร และตัวเลือกโดย
บูลีนสำหรับการโต้แย้งหรือไม่ หากไม่มี arg ตัวแปร is
เพิ่มขึ้นทุกครั้งที่มีตัวเลือก มิฉะนั้นจะเก็บค่าตัวเลือกไว้

ย่อย c_my_ocmd { # กรณีเอาต์พุตทั่วไป
ท้องถิ่น @ARGV = @_;
Mpp::Cmds::กรอบ {

... พิมพ์บางอย่างที่นี่ด้วย @ARGV พร้อมลบตัวเลือกโดยอัตโนมัติแล้ว

} 'f', qw(o O);
}

sub c_my_icmd { # กรณีอินพุตทั่วไปมี 2 ตัวเลือก
ท้องถิ่น @ARGV = @_;
ของฉัน( $สั้น, $ยาว );
Mpp::Cmds::กรอบ {

... ทำอะไรที่นี่กับ <>

} qw(i I rs), # s ระบุเท่านั้น --separator ไม่ใช่ -s
[qw(s short), \$short], # No option arg -> $short == 1
[qw(l long), \$long, 1, sub { warn "got arg $long"}];
}

คำสั่งง่าย ๆ มานี้ซึ่งเพิ่มเฉพาะอักขระตัวแรกของแต่ละอินพุต
บันทึก (เทียบเท่ากับ "&sed '$$_ = "\u\L$$_"'"):

ย่อย c_uc {
ท้องถิ่น @ARGV = @_;
Mpp::Cmds::กรอบ {
พิมพ์ "\u\L$_" ในขณะที่ <>;
} 'f', qw(ฉัน ฉัน o O rs);
}

ภายในบล็อกที่จัดการโดยเฟรม คุณสามารถมีบล็อกที่ซ้อนกันเพื่อดำเนินการวิกฤตได้
การทำงาน เช่น การเปิดไฟล์อื่นๆ

Mpp::Cmds::perform { ... } 'ข้อความ';

สิ่งนี้จะส่งข้อความด้วย "--verbose" (ซึ่งทุกคำสั่งยอมรับ) iff the
คำสั่งทำงานสำเร็จ แต่ถ้าบล็อกประเมินเป็นเท็จก็ตายด้วย
ข้อความปฏิเสธ

วิ่ง ต้นฉบับ ข้อโต้แย้ง...
นี่เป็นฟังก์ชัน Perl ปกติที่คุณสามารถใช้ได้ในบริบท Perl ภายใน makefile ของคุณ
คล้ายกับรูปแบบหลายอาร์กิวเมนต์ของระบบ แต่รันสคริปต์ Perl ภายใน
กระบวนการปัจจุบัน สำหรับคำสั่ง makepp ฟังก์ชัน perl หรือฟังก์ชันของคุณเอง
นั่นคือกระบวนการที่รัน makepp แต่สำหรับกฎที่เป็นกระบวนการย่อยที่ดำเนินการอยู่
มัน. สคริปต์จะถูกแยกวิเคราะห์หลายครั้งตามที่ได้รับการเรียก แต่คุณสามารถใส่ค่าจริงได้
ทำงานใน lib เหมือนกับที่ pod2html ทำ lib นี้จึงสามารถใช้งานได้ในระดับบนสุด ดังนั้น
ที่มีอยู่แล้ว:

perl { use mylib } # ถูกแยกไปยังกฎทั้งหมดซึ่งไม่จำเป็นต้องแยกวิเคราะห์ใหม่

%.ออก: %.in
makeperl { เรียกใช้ qw'myscript -o $(output) $(input)' }

หากสคริปต์เรียก "exit" ให้ปิดตัวอธิบายไฟล์มาตรฐานหรืออาศัยระบบ
เพื่อล้างข้อมูลหลังจากนั้น (เปิดไฟล์, หน่วยความจำ...) นี่อาจเป็นปัญหากับ "เรียกใช้" ถ้า
คุณเรียก "เรียกใช้" ภายในคำสั่งหรือฟังก์ชัน perl makepp อาจถูกรบกวนหรือ
การล้างข้อมูลจะเกิดขึ้นเมื่อสิ้นสุด makepp เท่านั้น

หากคุณมีปัญหาดังกล่าวข้างต้น ให้เรียกใช้สคริปต์จากภายนอก เช่น จาก
บรรทัดคำสั่งแทน ภายในการล้างกฎไม่ค่อยมีปัญหา โดยเฉพาะอย่างยิ่งไม่
เป็นการกระทำสุดท้ายของกฎ เนื่องจากกระบวนการย่อยของกฎจะออกหลังจากนั้น
ยกเว้นใน Windows

การเขียน ธุรกิจ ของตนเอง ลายเซ็น วิธีการ
บางครั้งคุณต้องการให้ makepp คำนวณวิธีการลงนามโดยใช้เทคนิคอื่น สำหรับ
ตัวอย่าง สมมติว่าคุณมีไบนารีที่ขึ้นอยู่กับไลบรารีที่ใช้ร่วมกัน โดยปกติถ้าคุณ
เปลี่ยนไลบรารี่ที่ใช้ร่วมกันคุณไม่จำเป็นต้องเชื่อมโยงไฟล์ปฏิบัติการที่ขึ้นอยู่กับมันอีกครั้งเพราะ
การเชื่อมโยงเสร็จสิ้นในเวลาทำงาน (อย่างไรก็ตาม เป็นไปได้ที่การลิงก์ไฟล์สั่งการอีกครั้ง
อาจจำเป็น นั่นเป็นสาเหตุที่ฉันไม่ได้ตั้งค่านี้เป็นค่าเริ่มต้น) สิ่งที่คุณต้องการ makepp
สิ่งที่ต้องทำคือต้องมีลายเซ็นเดียวกันสำหรับไลบรารีที่แชร์แม้ว่าจะมีการเปลี่ยนแปลงก็ตาม

สามารถทำได้หลายวิธี วิธีที่ง่ายที่สุดคือสร้างใหม่ของคุณเอง
วิธีการลงนาม (เรียกมันว่า "shared_object") คุณจะใช้วิธีลายเซ็นนี้
เฉพาะในกฎที่เชื่อมโยงไบนารีเช่นนี้:

โปรแกรมของฉัน : *.o lib1/lib1.so lib2/lib2.so
: ลายเซ็น shared_object
$(CC) $(อินพุต) -o $(เอาต์พุต)

ตอนนี้เราต้องสร้างวิธีการลงนาม

วิธีการลงลายเซ็นทั้งหมดต้องเป็นคลาสของตัวเอง และคลาสนั้นต้องมีบางวิธีพิเศษ
รายการ (ดู Mpp/Signature.pm ในการแจกจ่ายสำหรับรายละเอียด) ชื่อของชั้นจะต้อง
นำหน้าด้วย "Mpp::Signature::" ในกรณีนี้ จึงควรเรียกคลาสของเราว่า
"Mpp::Signature::shared_object". เราต้องสร้างไฟล์ชื่อ shared_object.น และใส่
มันเป็น Mpp::ลายเซ็น ไดเร็กทอรีบางแห่งใน Perl รวมถึงเส้นทาง; ที่ที่ง่ายที่สุด
อาจจะอยู่ใน Mpp/ลายเซ็น ไดเร็กทอรีในการติดตั้ง makepp (เช่น
/usr/local/share/makepp/Mpp/ลายเซ็น หรือติดตั้งที่ไหนก็ได้)

สำหรับรายละเอียดที่แน่นอนเกี่ยวกับสิ่งที่ต้องทำในชั้นเรียนนี้ คุณควรดูอย่างละเอียด
ไฟล์ Mpp/Signature.น และอาจจะยัง Mpp/ลายเซ็น/exact_match.pm ในการแต่งหน้า
การกระจาย. แต่ในกรณีของเรา สิ่งที่เราต้องทำคือเปลี่ยนแปลงเล็กน้อยใน an
กลไกการลงนามที่มีอยู่ ถ้าไฟล์นั้นเป็นไลบรารี่ที่ใช้ร่วมกัน เราต้องการค่าคงที่
ลายเซ็น ในขณะที่ถ้าไฟล์เป็นอย่างอื่น เราต้องการที่จะพึ่งพา makepp ปกติ
กลไกการลงนาม วิธีที่ดีที่สุดที่จะทำสิ่งนี้คือการสืบทอดจาก
"Mpp::Signature::c_compilation_md5" ซึ่งเป็นวิธีการลงลายมือชื่อที่ปกติจะเลือกใช้
เมื่อ makepp รู้จักคำสั่ง link

ดังนั้นไฟล์ Mpp/ลายเซ็น/shared_object.pm อาจมีสิ่งต่อไปนี้:

ใช้อย่างเข้มงวด
แพ็คเกจ Mpp::Signature::shared_object;
ใช้ Mpp::Signature::c_compilation_md5;
@ISA ของเรา = qw(Mpp::Signature::c_compilation_md5); #ระบุมรดก
$shared_object ของเรา = bless \@ISA; # เวทมนตร์ที่ช่วยให้ makepp ค้นหา
# รูทีนย่อยสำหรับวิธีนี้ ทั้งหมด
# วิธีการลงนามต้องมีหนึ่งในวิธีเหล่านี้
# ค่าไม่ได้ใช้เพียงวัตถุใด ๆ
# นี่คือวิธีการที่ถูกเรียกเมื่อเราต้องการลายเซ็นของ
# เป้าหมายหรือการพึ่งพาใด ๆ ที่วิธีการลายเซ็นนี้ใช้งานอยู่:
ลายเซ็นย่อย {
my ($self, # สิ่งนี้จะเหมือนกับ $shared_object
$finfo) = @_; #โครงสร้างพิเศษที่บรรจุทุกอย่าง
# makepp รู้เกี่ยวกับไฟล์นี้ ดู
# Mpp/File.pm สำหรับรายละเอียด

if ($finfo->{NAME} =~ /\.s[oa]$/) { # ชื่อไฟล์ลงท้ายด้วย .so หรือ .sa?
ส่งคืน $finfo->file_exists ? 'มีอยู่' : '';
# ส่งคืนลายเซ็นเดิมเสมอหากไฟล์
#มีอยู่จริง ในกรณีนี้ ลายเซ็นคือ
# สตริง "มีอยู่"
}

Mpp::ลายเซ็น::c_compilation_md5::ลายเซ็น;
# หากไฟล์ไม่ได้ลงท้ายด้วย .so หรือ .sa
# มอบหมายให้ใช้วิธีลงนามตามปกติของ makepp
}

ไฟล์นี้จัดทำขึ้นเพื่อเป็นตัวอย่างในการแจกจ่าย makepp โดยมีบางส่วนเพิ่มเติม
ความเห็น

อนึ่ง ทำไมเราไม่ตั้งค่านี้เป็นค่าเริ่มต้นล่ะ มีบางครั้งที่เปลี่ยน a
ห้องสมุดที่ใช้ร่วมกันจะต้องมีการเชื่อมโยงโปรแกรมของคุณใหม่ หากคุณเคยเปลี่ยนทั้ง
สัญลักษณ์ที่ไลบรารีที่ใช้ร่วมกันกำหนดหรือสัญลักษณ์ที่ขึ้นอยู่กับไลบรารีอื่น
เพราะบางครั้งอาจจำเป็นต้องลิงก์ซ้ำ

สมมติว่าไลบรารีที่แบ่งใช้เรียกรูทีนย่อยบางอย่างที่โปรแกรมของคุณ
จัดเตรียมให้. เช่น สมมติว่าคุณเปลี่ยนไลบรารีที่แชร์ตอนนี้จึงเรียกexternal
รูทีนย่อย "xyz()" ยกเว้นกรณีที่คุณใช้ตัวเลือก "-E" หรือ "--export-dynamic" กับตัวเชื่อมโยง
(สำหรับ GNU binutils ลิงค์อื่น ๆ มีชื่อตัวเลือกต่างกัน) สัญลักษณ์ "xyz()" อาจไม่
สามารถเข้าถึงตัวเชื่อมโยงรันไทม์ได้แม้ว่าจะมีอยู่ในโปรแกรมของคุณก็ตาม

ที่แย่ไปกว่านั้น สมมติว่าคุณกำหนด "xyz()" ในไลบรารีอื่น (เรียกมันว่า libxyz), แบบนี้:

my_program: main.o lib1/lib1.so xyz/libxyz.a

เนื่องจาก "libxyz" คือ a .a ไฟล์และไม่ใช่ .ดังนั้น ไฟล์ ดังนั้น "xyz()" จะไม่สามารถดึงเข้าไปได้
อย่างถูกต้องจาก libxyz.a เว้นแต่คุณจะเชื่อมโยงไบนารีของคุณอีกครั้ง

Mpp::Signature method ยังควบคุมไม่เพียงแต่สตริงที่ใช้ในการตรวจสอบว่าa
ไฟล์มีการเปลี่ยนแปลง แต่อัลกอริธึมที่ใช้เปรียบเทียบสตริง ตัวอย่างเช่น
วิธีการลายเซ็น "target_newer" ในการแจกจ่าย makepp เพียงต้องการให้
เป้าหมายจะใหม่กว่าการขึ้นต่อกัน ในขณะที่วิธีการลงนาม "exact_match" (และ
ทุกอย่างที่ขึ้นอยู่กับมัน เช่น "md5" และ "c_compilation_md5") กำหนดให้
ไฟล์มีลายเซ็นเหมือนกับในบิลด์ล่าสุด

ต่อไปนี้เป็นวิธีการลงลายมือชื่อประเภทอื่นๆ ที่อาจเป็นประโยชน์ เพื่อช่วยให้คุณตระหนัก
ความเป็นไปได้ หากวัตถุประสงค์ทั่วไปเพียงพอ บางส่วนเหล่านี้อาจเป็น
รวมอยู่ใน makepp:

· วิธีการลงลายมือชื่อสำหรับไลบรารีที่ใช้ร่วมกันที่ส่งคืนเช็คซัมของการส่งออกทั้งหมด
สัญลักษณ์และสัญลักษณ์ทั้งหมดที่ต้องการจากไลบรารีอื่น สิ่งนี้จะแก้
ปัญหากับตัวอย่างข้างต้น และรับประกันการเชื่อมโยงที่ถูกต้องในทุกสถานการณ์
มีการทดลองทำสิ่งนี้ในการแจกจ่าย makepp (ดู
Mpp/ลายเซ็น/shared_object.pm) แต่จะใช้ได้กับ GNU binutils และ ELF . เท่านั้น
ห้องสมุดในขณะนี้

· วิธีการลงลายมือชื่อที่ละเว้นการประทับวันที่ที่เขียนลงในไฟล์ เช่น ถ้าคุณ
สร้าง .c ไฟล์โดยอัตโนมัติโดยใช้โปรแกรมบางโปรแกรมที่ยืนยันการใส่สตริง
ในลักษณะนี้:

static char * date_stamp = "สร้างโดยอัตโนมัติในวันที่ 01 เมษายน 2004 โดยไม่มีใคร";

คุณสามารถเขียนวิธีการลงนามที่ละเว้นการเปลี่ยนแปลงในการประทับวันที่โดยเฉพาะ
ดังนั้นหากการประทับวันที่เป็นเพียงสิ่งเดียวที่เปลี่ยนแปลง makepp จะไม่สร้างใหม่

· วิธีการลงนามที่คำนวณลายเซ็นตามปกติ แต่ละเว้น
การพึ่งพาสถาปัตยกรรมเมื่อตัดสินใจว่าจะสร้างใหม่หรือไม่ สิ่งนี้อาจเป็นประโยชน์สำหรับ
ไฟล์ที่ไม่ขึ้นกับสถาปัตยกรรมอย่างแท้จริง ปัจจุบันถ้าคุณสร้างบนสถาปัตยกรรมเดียว
makepp จะยืนยันในการสร้างไฟล์ขึ้นใหม่แม้กระทั่งไฟล์ที่ไม่ขึ้นกับสถาปัตยกรรมเมื่อคุณเปลี่ยน
สู่สถาปัตยกรรมที่แตกต่าง

· วิธีการลงลายมือชื่อที่รู้วิธีที่จะเพิกเฉยต่อความคิดเห็นในไฟล์ลาเท็กซ์ เช่น
เมธอด "c_compilation_md5" รู้วิธีละเว้นความคิดเห็นในไฟล์ C

· วิธีการลงลายมือชื่อสำหรับการดึงเอกสารอัตโนมัติที่เช็คซัมเฉพาะกับ
ความคิดเห็นที่ตัวแยกเอกสารต้องการและละเว้นการเปลี่ยนแปลงอื่น ๆ ของแหล่งที่มา
ไฟล์

ยังไม่เสร็จ
เอกสารนี้ยังไม่เสร็จสิ้น ควรครอบคลุมถึงวิธีการเขียนเครื่องสแกนของคุณเองสำหรับ
รวมไฟล์และสิ่งต่างๆ เช่นนั้น

ใช้ makepp_extending ออนไลน์โดยใช้บริการ onworks.net


เซิร์ฟเวอร์และเวิร์กสเตชันฟรี

ดาวน์โหลดแอพ Windows & Linux

  • 1
    วงเล็บ
    วงเล็บ
    Brackets เป็นโอเพ่นซอร์สที่ทันสมัยและฟรี
    โปรแกรมแก้ไขข้อความที่สร้างขึ้นโดยเฉพาะสำหรับเว็บ
    การพัฒนา. เขียนใน HTML, CSS และ
    JavaScript พร้อมเครื่องมือภาพที่เน้นและ
    เตรียม...
    ดาวน์โหลดวงเล็บเหลี่ยม
  • 2
    ฟรี Pascal Compiler
    ฟรี Pascal Compiler
    คอมไพเลอร์ Pascal 32/64/16 บิตสำหรับ
    Win32/64/CE, ลินุกซ์, Mac OS X/iOS,
    Android, FreeBSD, OS/2, เกมบอย
    แอดวานซ์, Nintendo NDS และ DOS;
    ความหมายเข้ากันได้ wi ...
    ดาวน์โหลดคอมไพเลอร์ Pascal ฟรี
  • 3
    Canon EOS DIGITAL ข้อมูล
    Canon EOS DIGITAL ข้อมูล
    Canon ไม่มีจำนวนชัตเตอร์
    รวมอยู่ในข้อมูล EXIF ​​​​ของ
    ไฟล์ภาพซึ่งตรงข้ามกับ Nikon และ
    เพนแท็กซ์ ไม่มี Canon อย่างเป็นทางการ
    แอปพลิเคชัน ...
    ดาวน์โหลดข้อมูล Canon EOS DIGITAL
  • 4
    การตรวจสอบ
    การตรวจสอบ
    rEFInd เป็นทางแยกของ rEFIt boot
    ผู้จัดการ. เช่นเดียวกับ rEFIt rEFInd can
    ตรวจจับการบูต EFI ที่คุณติดตั้งโดยอัตโนมัติ
    รถตักและนำเสนอ GUI ที่สวยงาม
    เมนูตัวเลือกการบูต...
    ดาวน์โหลด rEFInd
  • 5
    ด่วนลุค GSI
    ด่วนลุค GSI
    หน้าดาวน์โหลด SourceForge นี้เป็นไป
    อนุญาตให้ผู้ใช้ดาวน์โหลดซอร์สของฉัน
    GSIs อ้างอิงจาก phhusson's great
    งาน. ฉันสร้างทั้ง Android Pie และ
    แอนดรอยด์ 1...
    ดาวน์โหลด ExpressLuke GSI
  • 6
    นักดนตรี
    นักดนตรี
    Music Caster เป็นเครื่องเล่นเพลงแบบถาด
    ที่ให้คุณส่งเพลงท้องถิ่นของคุณไปที่a
    อุปกรณ์ Google Cast ในการวิ่งครั้งแรก
    คุณจะต้องคลิกลูกศรใน .ของคุณ
    ตา...
    ดาวน์โหลด Music Caster
  • เพิ่มเติม»

คำสั่ง Linux

Ad