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

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

โครงการ:

ชื่อ


jmake - ตัวสร้าง makefile ทั่วไป

เรื่องย่อ


เจเมค [ ซีพี ตัวเลือก ]

DESCRIPTION


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

ในการใช้งาน เจเมค คุณต้องเขียน เจเมคไฟล์ ประการแรกซึ่งบรรยายถึงสิ่งที่จะเป็น
สร้าง. ของคุณ เจเมคไฟล์ จะรวมอยู่ในเทมเพลตทั่วไปผ่านทาง C pre-
โปรเซสเซอร์ ซึ่งหมายความว่าคุณสามารถใช้ความคิดเห็น C /**/ ตามปกติได้ แต่ไม่ใช่เชลล์ #
ความคิดเห็น ความคิดเห็น C จะไม่ปรากฏในที่สร้างขึ้น Makefile.SH แต่เส้นเริ่มต้น
ด้วย ;# จะปรากฏเป็นความคิดเห็นของเชลล์ในที่สุด หากคุณต้องเขียนสตริง /* ใน
สร้าง Makefile.SH แล้วคุณต้องหนีมัน (มิฉะนั้น เจเมค จะคิดว่ามันเป็น
เริ่มต้นความคิดเห็น C) เพียงใส่ # ข้างหน้า * เช่นใน /#*

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

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

ความรู้ทั้งหมดของ เจเมค ถูกเก็บไว้ในสองไฟล์: template Jmake.tmpl และมาโคร
ไฟล์คำจำกัดความ Jmake.กฎ ไฟล์แรกรวมถึงไฟล์ที่สองพร้อมกับ
เจเมคไฟล์ บางครั้งจำเป็นต้องรู้ว่าสิ่งต่าง ๆ ทำงานอย่างไรจึงจะสามารถใช้งานได้อย่างถูกต้อง
คุณสมบัติทั้งหมดที่มีให้ ตัวอย่างเช่น คุณอาจต้องเขียนกฎของคุณเองสำหรับ a
โครงการเฉพาะ แม้ว่าคุณจะไม่สามารถเขียนทับกฎที่กำหนดไว้ล่วงหน้าได้ แต่คุณสามารถขยายขอบเขต
Jmake.กฎ ไฟล์หรือเพียงแค่เพิ่มมาโครของคุณใน your เจเมคไฟล์ คุณอาจใช้ #include
คำสั่งเมื่อคุณต้องการแชร์มาโครเหล่านี้และไม่ต้องการทำซ้ำโค้ด

ไวยากรณ์ใน Jmake.rules นั้นไม่หรูหราเลย แต่:

- แยกวิเคราะห์ได้ง่าย (เช่นไฟล์ sendmail.cf หรือ troff)
- กฎไม่ควรเปลี่ยนแปลงบ่อยนัก
- ง่ายพอที่จะเชี่ยวชาญในห้านาที :-)

นี่คือคำอธิบายเล็กน้อย:

1) เพื่อจัดการกับสิ่งต่าง ๆ ซีพี การใช้งาน:

· Final @!\ หมายถึง สิ้นสุดบรรทัด บรรทัดถัดไปเริ่มต้นที่ระยะขอบด้านซ้าย
· สุดท้าย @@\ หมายถึง: สิ้นสุดบรรทัด บรรทัดถัดไปให้เยื้องโดยแท็บเดียว

ควรมี @!\ หรือ @@\ ตัวใดตัวหนึ่งที่ท้ายบรรทัดเสมอ เพียง
ข้อยกเว้นสำหรับมาโครที่จะใช้เป็นส่วนหนึ่งของเนื้อหากฎ (เช่น
โปรแกรม RemoveTarget). ในกรณีนั้น บรรทัดแรก (ซึ่งถือ #กำหนด) ควร
ลงท้ายด้วยแบ็กสแลชเดียว

2) คำจำกัดความของสัญลักษณ์:

· >SYMBOL: กำหนดสัญลักษณ์
· ?เครื่องหมาย: : เก็บไว้ iff SYMBOL ถูกกำหนดไว้
· %เครื่องหมาย: : เก็บไว้ iff ไม่ได้กำหนด SYMBOL

?SYM สามารถซ้อนกันได้ (ตรรกะ AND) เช่นใน:

?สัญลักษณ์:%โทเค็น:ข้อความ

ซึ่งจะเก็บข้อความไว้หากมีการกำหนด SYMBOL และไม่ได้กำหนด TOKEN เพื่อดำเนินการ a
ตรรกะ OR ดูด้านล่าง

3) การทดสอบเป้าหมาย Makefile:

-เป้า?: : เก็บไว้ iff เป้า ถูกกำหนดไว้
-เป้า%: : เก็บไว้ iff เป้า ไม่ได้กำหนดไว้

เมคไฟล์ เป้า ถูกกำหนดให้เป็นเป้าหมายแบบสแตนด์อโลน เช่น
ขึ้นอยู่กับ.local เป้าหมายซึ่งจะถูกกำหนดเป็น:

ขึ้นอยู่กับ.ท้องถิ่น:

โปรดทราบด้วยว่ามันใช้ได้เฉพาะกับเป้าหมายที่กำหนดไว้ so ไกล ในการสร้าง
เมคไฟล์ ไม่ใช่ภาคแสดงที่ใช้ทดสอบเป้าหมายที่
จะถูกกำหนดในที่สุดในภายหลังในรุ่น

4) คำสั่ง:

คำสั่งสามารถส่งผ่านไปยัง เจเมค. พวกเขาเริ่มต้นด้วย '|' นำหน้า คำสั่งที่ใช้ได้
คือ:

· |คำต่อท้าย : เพิ่ม ไปที่รายการ .SUFFIXES: ใน makefile

· |กฎ: : เพิ่ม ไปที่ส่วนกฎอาคาร

· |กฎ: : เหมือนเดิม มีแถบนำหน้า

· |skip: ข้ามข้อความจนกว่าจะพบบรรทัดที่ขึ้นต้นด้วย '-skip'

· |subst: เริ่มต้นส่วนที่บรรทัดจะถูกแทนที่ตัวแปร
จนกว่าจะพบ '-subst' ซึ่งหมายความว่าเมื่อเรียกใช้ Makefile.SH ทั้งหมด
อินสแตนซ์ของ $var ภายใน คำนาม ส่วนจะถูกแทนที่ด้วยเปลือก

· |shell: ปล่อยส่วนจนกว่าจะจับคู่ '-shell' ตามที่เป็นอยู่ในไฟล์ที่สร้างขึ้น
Makefile.SH ซึ่งจะเป็นประโยชน์ในการเตรียมตัว |กรณี ส่วนต่างๆ มันไม่ใช่
อนุญาตให้ทำรัง เปลือกหอย ส่วน

· |case: คำสั่งนี้ต้องตามด้วยชื่อตัวแปรเชลล์
นำเครื่องหมาย '$') และรูปแบบกรณีเช่นสตริง "var in
f*" มันจะสร้างการทดสอบ "case" ที่สอดคล้องกันใน Makefile.SH on
ค่า "$var" และเฉพาะในกรณีที่การทดสอบนี้เป็นจริง ส่วนจะถึง
'-case' ที่ตรงกันจะถูกสร้างขึ้นใน Makefile เมื่อเรียกใช้ Makefile.SH มัน
สามารถทำรังได้ กรณี ส่วนต่างๆ ได้อย่างอิสระ

· |ขยาย : ขยายบรรทัดจนถึง '-expand' ด้วย . สมบูรณ์
ตัวอย่างแสดงอยู่ด้านล่าง

· |ครั้งเดียว : ข้อความไม่เกิน '-ครั้งเดียว' จะปรากฏเฉพาะครั้งแรกเท่านั้น

'|' ไม่สามารถซ้อนคำสั่งได้ เว้นแต่จะระบุไว้เป็นอย่างอื่น โดยเฉพาะอย่างยิ่ง เนื่องจาก
การใช้งานอย่างง่ายของ |ข้าม, มันเป็นไปไม่ได้ที่จะวาง |ข้าม ภายในข้าม
ส่วนหนึ่ง. อย่างไรก็ตาม a |ครั้งเดียว ส่วนอาจมี |ข้าม ส่วนต่างๆ อนุญาตให้ทำรัง
|กรณี ส่วนที่จะ

นี่คือวิธีการใช้ตรรกะ OR:

/* ใช้ SYMBOL หรือไม่ใช้ TOKEN */
?SYMBOL:text /* เก็บข้อความไว้ถ้า SYMBOL */
%สัญลักษณ์:|ข้าม
%TOKEN:text /* เก็บข้อความไว้ถ้าไม่ใช่ TOKEN */
-ข้าม

อันที่จริง มันน่าเกลียดเพราะข้อความต้องปรากฏสองครั้ง โชคดีที่ฉันทำ
ไม่ใช้โครงสร้างนั้น :-)

อันที่จริง ตามที่คุณเดาไว้แล้ว วิธีที่ดีที่สุดในการใช้ตรรกะOR
คือการใช้กฎของเดอมอร์แกน:

ไม่ (p หรือ q) <=> ไม่ใช่ p และไม่ใช่ q

/* ใช้ SYMBOL หรือไม่ใช้ TOKEN (พยายาม #2) */
%สัญลักษณ์:?โทเค็น:|ข้าม
ข้อความ /* หากเป็น SYMBOL หรือไม่ใช่ TOKEN */
-ข้าม

ใครบอกว่าพวกเขาไม่สนใจตรรกะ? ;-)

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

|ขยาย a!foo บาร์! ข!ใช่ ไม่ใช่!
!NS::
เสียงสะท้อน !a, !b
-ขยาย

จากนั้นกฎสองข้อจะถูกพิมพ์ และค่าของ (a,b) สำหรับค่าแรกจะเป็น (foo,
ใช่) สำหรับวินาที (บาร์ไม่ใช่) การเปลี่ยนตัวถูกควบคุมโดย '!' อักขระ.
หากคำที่จะแทนที่เป็นส่วนหนึ่งของคำอื่นให้แยกด้วย ^^ construct
เช่นใน: !b^^c. เป็นไปได้ที่จะใช้มาโคร Makefile ในไฟล์ , และพวกเขา
จะถูกขยายโดย jmake หากนี่ไม่ใช่สิ่งที่คุณต้องการ ให้ข้ามเครื่องหมาย '$' ตัวแรก
(นี่คือการหลบหนีของ Makefile นั่นคือคุณต้องเพิ่ม '$' เป็นสองเท่า ไม่ใช่นำหน้าด้วย a
แบ็กสแลช) A // หมายถึงค่าการแทนที่ค่า null
โครงสร้าง ^^^ มีลักษณะเหมือน ^^ คือถูกถอดออก แต่ก็ลบใด ๆ ออกด้วย
ตามช่องว่างหลัง ^^^. หากคุณเติมบางอย่างไว้ข้างหน้าอาร์กิวเมนต์แมโคร
และอาร์กิวเมนต์แมโครนั้นถูกเขียนด้วยช่องว่างก่อนหน้ามัน จะทำให้คุณ
เชื่อมบางสิ่งก่อนค่าสุดท้ายของอาร์กิวเมนต์นั้น

นี่เป็นอีกตัวอย่างหนึ่งที่แสดงวิธีการใช้มาโคร Expand มันคือ
กำหนดไว้ใน Jmake.กฎ เป็น:

#define Expand(rule, pattern) @!
|expand pattern @!
rule @!
-ขยาย

ดังนั้นเราสามารถเขียนใน เจเมคไฟล์:

|ข้าม
A = ฟูบาร์
-ข้าม

#define Rule @!
$(DIR)/!a^^.o: !a^^.o @@
$(CC) -c !a^^.c @@
$(MV) !a^^.o $(DIR)

ขยาย(กฎ, a!$(A)!)

ซึ่งจะเกิดใน Makefile.SH:

$(DIR)/foo.o: foo.o
$(CC) -c fo.c
$(MV) ฟู.โอ $(DIR)

$(DIR)/bar.o: บาร์.โอ
$(CC) -c bar.ค
$(MV) บาร์.o $$(DIR)

การประกาศ 'A' ถูกล้อมรอบด้วย ข้ามเพื่อไม่ให้ปรากฏใน
สร้าง Makefile.SH แต่จะถูกนำมาพิจารณาโดย เจเมค สำหรับ
ทดแทนในรูปแบบ

จำนวนของการขยายถูกกำหนดโดยจำนวนของค่าที่เป็นไปได้สำหรับ
เป็นครั้งแรก พารามิเตอร์. หากพารามิเตอร์อื่นมีค่าทดแทนน้อยกว่า จะได้รับ
พวกที่เป็นโมฆะ

คุณสามารถเพิ่มนิพจน์ทั่วไปที่ส่วนท้ายของ '-expand' ประจำนี้
นิพจน์จะถูกลบออกจากชุดส่วนขยายสุดท้ายที่ส่วนท้ายของแต่ละบรรทัด
นอกจากนี้ยังเป็นไปได้ที่จะทำการแทนที่ในรายการที่ขยายโดยใช้ไวยากรณ์
(ถ้า 'f' เป็นตัวแปรขยาย) !f:= ที่ไหน และ เป็นสองปกติ
นิพจน์ (ไม่มีช่องว่าง) รูปแบบ จะถูกแทนที่ด้วยรูปแบบ
(จะแทนที่เฉพาะครั้งแรกเท่านั้น)

สุดท้าย คุณอาจอ้างอิงในส่วนที่ขยายไปยังตัวแปรที่มีค่าที่คำนวณได้
ผ่านการขยายอื่นซึ่งทำให้ง่ายต่อการกำหนดทั่วไป เจเมคไฟล์.

ตัวอย่าง:

SRC = foo.c บาร์ค
OBJ =
|ขยาย f!$(SRC)!
!f:\.c=\.o
-expand \
INC =
|ขยาย f!$(OBJ)!
!f:\.o=\.h
-expand \

ซึ่งจะเกิดใน Makefile.SH:

SRC = foo.c บาร์ค
OBJ =
ฟูโอ
บาร์.โอ
INC =
ฟู
บาร์.h

อย่าลืมปกป้องอักขระพิเศษในนิพจน์ทั่วไปของคุณเช่น
แบ็กสแลช จุด ฯลฯ...

การขอ ครั้งเดียว คำสั่งถูกแท็กด้วยชื่อ ครั้งแรกที่ชื่อปรากฏขึ้นครั้งเดียว
โครงสร้างถูกละเว้นและข้อความถึง '-ครั้งเดียว' จะถูกคัดลอกในการสร้าง
Makefile.SH อย่างไรก็ตาม การเกิดขึ้นของชื่อเดียวกันในอนาคตจะถูกละเว้น (ครั้งเดียว
จะทำตัวเหมือน ข้าม).

ตัวอย่าง:

|ครั้งนี้_is_a_name

-ครั้งหนึ่ง

การขอ เปลือกหอย คำสั่งสามารถใช้เพื่อสร้างชิ้นส่วนของเชลล์ใน Makefile.SH สำหรับ
ตัวอย่าง ส่วนต่อไปนี้ใน Jmakefile:

|เปลือก
กรณี "$d_usegtk1" ใน
กำหนด) glib=1; gtk=1;;
ว่า C
-เปลือก

จะทำให้การสร้างแฟรกเมนต์ที่แนบมาใน Makefile.SH คำนวณ
ค่าของ กะล่อน และ gtk ตัวแปรตามตัวแปรคอนฟิกูเรชัน
d_usegtk1 ตั้งค่าโดยการรัน Configure

ในทางกลับกัน สามารถใช้ในภายหลังได้ กรณี ส่วนที่จะเปิดใช้งานส่วนต่างๆของ
Makefile เฉพาะเมื่อสร้างสำหรับ GTK1 โดยใช้ glib-1.x:

|case glib ใน 1
แสดง:
echo "การสร้างสำหรับ glib-1.x"
-กรณี

ส่วนนี้จะสร้างสิ่งนี้ใน Makefile.SH:

!ไม่!ซับ!
กรณี "$glib" ใน
1)
$spitshell >>Makefile <<'!NO!SUBS!'
แสดง:
echo "การสร้างสำหรับ glib-1.x"
!ไม่!ซับ!
;;
ว่า C
$spitshell >>Makefile <<'!NO!SUBS!'

และเมื่อเรียกใช้ Makefile.SH กฎ "การแสดงผล" ด้านบนจะปรากฏเฉพาะเมื่อ
สร้างสำหรับ glib-1.x รูปแบบของรอบชิงชนะเลิศ Makefile จึงสามารถพึ่งพา
ตัวเลือกการกำหนดค่าที่เลือกเมื่อ กำหนดค่า ถูกเรียกใช้

5) การเริ่มต้น:

· + : ใส่ทั้งบรรทัดในส่วนการเริ่มต้น
· ++สัญลักษณ์ : เพิ่ม ไปที่แมโคร SYMBOL

6) ตัวแปรที่ผู้ใช้กำหนด:

ผู้ใช้อาจกำหนด CFLAGS, LDFLAGS หรือ DPFLAGS เป็นแฟล็กเพิ่มเติมเพื่อใช้ใน C
การคอมไพล์ การเชื่อมโยงเฟส หรือเป้าหมายที่ขึ้นต่อกัน จึงสามารถเพิ่มความพิเศษบางอย่างได้
แฟล็ก เช่น -I หรือไลบรารีสำหรับ Makefiles ในไดเร็กทอรีย่อยเฉพาะ

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



โปรแกรมออนไลน์ Linux และ Windows ล่าสุด