WPWMM4 (1) - เว็บเพจที่มี Make and M4 - สร้างหน้าเว็บคงที่
ใช้คำสั่ง Make อย่างง่าย MakeFile เข้ากันได้กับ FreeBSD's และ NetBSD บน Linux ควรติดตั้งแพ็คเกจ bmake
ด้วย WPWMM4 สามารถสร้างหน้าเว็บคงที่จากไฟล์ M4 การสร้างทำได้โดย Make คุณสามารถใช้สคริปต์หรือคำสั่งภายนอก
คุณควรสร้างไฟล์ config.mk ในไดเรกทอรีและตั้งค่าตัวแปรต่อไปนี้ภายในไฟล์นี้ คุณสามารถใช้ . รวม ใน config.mk ของคุณแน่นอน
Common_dir : ที่ 00_defines.m4 คือ โดยทั่วไปคือไดเรกทอรีเดียวกับ makefile
include_dir : ไดเรกทอรีที่ผู้ใช้รวม M4 เป็น มันสัมพันธ์กับไดเรกทอรีต้นฉบับหลัก
SRC_DIR : ตัวแปรนี้ชี้ไปที่ไดเรกทอรีต้นฉบับซึ่งไฟล์ต้นฉบับ (ปกติ *.M4 ) คือ มันสามารถมีไดเรกทอรีย่อย
Assets_dir : ในไดเรกทอรีนี้เป็นไฟล์คงที่ ( * .css , * .js ฯลฯ )
assets_dest_dir : ไดเรกทอรีเป้าหมายของไฟล์คงที่ หากคุณต้องการภายใน $ {dest_dir} ควรรวมไว้ในตัวแปรนี้
assets_cp : คำสั่งที่จะคัดลอก $ {assets_dir} ค่าเริ่มต้นคือ @cp -r
dest_dir : สถานที่ที่รวบรวม (สร้าง) HTML แผนผังไดเรกทอรีย่อยของ $ {src_dir} ถูกสร้างขึ้นในไดเรกทอรีนี้โดย Make
Flag_dir : ไดเรกทอรีที่ตั้งค่าสถานะ ธงเป็นไฟล์ง่าย ๆ ที่เก็บข้อมูลเกี่ยวกับการสร้าง มีเพียงธงเดียว: $ {flag_mkdir} ซึ่งลงนามในเวลาที่โครงสร้างไดเรกทอรีถูกสร้างขึ้นใน $ {dest_dir} และจัดเก็บรายการของไดเรกทอรีที่สร้างขึ้น คุณสามารถเพิ่ม Plus ขึ้นอยู่กับ $ {mkdir_req} - ดังนั้นสามารถสร้างโครงสร้างไดเรกทอรีอีกครั้งหลังจากไฟล์นี้เปลี่ยนไป
layout_dir : นี่คือเลย์เอาต์
VIRT_DIR : ไดเรกทอรีนี้มีเทมเพลตของหน้าเสมือน
เป้าหมาย : รายการพื้นที่แยกพื้นที่ของไฟล์คงที่ (ไม่รวมหน้าเสมือนจริง) สิ่งที่ควรสร้าง อย่ารวม $ {dest_dir} เพราะรวมอยู่ในระบบอาคาร คุณสามารถใช้ไดเรกทอรีได้แน่นอน ข้อกำหนดอัตโนมัติของมันคือไฟล์เดียวกันใน $ {SRC_DIR} แทนที่ส่วนขยาย HTML เป็นส่วนขยาย M4
targets_manual : รายการพื้นที่แยกพื้นที่ของไฟล์คงที่สิ่งที่ควรสร้าง อย่ารวม $ {dest_dir} เพราะรวมอยู่ในระบบอาคาร เป้าหมายเหล่านี้ไม่ได้สร้างข้อกำหนดโดยอัตโนมัติเป็น $ {เป้าหมาย} ด้านบน
GREQ : ข้อกำหนดระดับโลก มันเป็นสิ่งจำเป็นสำหรับ ทุก เป้าหมาย ค่าเริ่มต้นว่างเปล่า
foo.html_req : ข้อกำหนดเพิ่มเติมของ foo.html ซึ่งรวมอยู่ในตัวแปร $ {เป้าหมาย} (ดูด้านบน) Foo.M4 จะถูกเพิ่มโดยอัตโนมัติ ตัวแปรเหล่านี้เป็นทางเลือก
M4 : คำสั่ง M4 ในกรณีส่วนใหญ่สามารถตั้งค่าได้ง่ายๆเป็น M4 (ใน เส้นทาง ) ตัวแปรนี้เป็นตัวเลือกค่าเริ่มต้นคือ M4
M4_Params : พารามิเตอร์ของคำสั่ง M4 ค่าเริ่มต้นคือ -p -i รวม -d_src_dir = $ {src_dir} โปรดทราบว่าตัวเลือก -P เป็น neccessary เพราะเราใช้แมโครในตัวพร้อมคำนำหน้า M4_
ตัวแปรต่อไปนี้ถูกสร้างขึ้นแบบไดนามิกระหว่างการสร้างและคุณสามารถใช้มันในแหล่ง M4 และแม่แบบของคุณ
_directory : ไดเรกทอรีเป้าหมายภายใน $ {dest_dir} (ไม่มี $ {dest_dir} คำนำหน้า) รูทของ $ {dest_dir} คือ "." (dot)
_file : ชื่อไฟล์เป้าหมายซึ่งอยู่ภายใต้การสร้าง (โดยไม่มีส่วนขยายใด ๆ )
ระบบจัดส่งผู้ช่วยบางคนที่คุณสามารถใช้ในไฟล์ของคุณ พวกเขาถูกกำหนดไว้ใน 00_defines.m4 นี่คือรายชื่อผู้ช่วย:
_body (เนื้อหาตัวเลือก) : ผลิต <ตัวเลือก $ body> $ content </body>
_Charset (charset) : ผลิต <meta charset = "$ charset">
_class (class1, class2, ... ) : ผลิต class = "$ class1 $ class2 ... "
_css (cssfile) : ผลิต <link rel = "stylesheet" href = $ cssfile>
_DIV (คลาสเนื้อหาตัวเลือก) : ผลิต <div class = $ class $ optopment> $ content </div>
_head (ตัวเลือกเนื้อหา) : สร้าง <head $ optopment> $ content </head>
_href (URL, ข้อความ, ตัวเลือก, ชื่อเรื่อง) : ผลิต <a href = $ url $ url $ title = $ title> text </a>
_meta (พารามิเตอร์) : ผลิต <พารามิเตอร์ meta $>
_OL (พารามิเตอร์) : สร้างรายการที่สั่งซื้อ <ol> <li> $ 1 </li> <li> $ 2 </li> ... </ol> คุณสามารถระบุรายการในรายการพารามิเตอร์คั่นด้วยเครื่องหมายจุลภาค ระวังเกี่ยวกับการอ้างอิง!
_Stag (tagname, พารามิเตอร์) : ผลิต <$ tagname $ พารามิเตอร์>
_tag (tagname, เนื้อหา, ตัวเลือก) : ผลิต <$ tagname $ optopment> $ content </$ tagname>
_title (ชื่อตัวเลือก) : ผลิต <ชื่อเรื่อง $ ตัวเลือก> $ title </title>
_UL (พารามิเตอร์) : เหมือนกับ _OL
หน้าเสมือนไม่มีไฟล์แหล่งที่มา (M4) มันมีประโยชน์เมื่อคุณต้องการสร้างหน้าคล้ายกับเนื้อหาที่คล้ายกัน (ตัวอย่างเช่นรายการไฟล์ PDF, รายการรูปภาพ, ... )
คุณควรสร้างกลุ่มของ เสมือนจริง (คุณสามารถเพิ่มเสมือนเพียงหนึ่งเดียวลงในกลุ่ม) คุณสามารถทำได้ด้วยตัวแปรต่อไปนี้:
เสมือนจริง : มีชื่อของหมวดหมู่ เช่น virtuals = cat1 cat2 หมวดหมู่ถูกคั่นด้วยตัวละครอวกาศ
VirtualTemplate_* : คุณสามารถตั้งค่า (ติดตามตัวอย่างด้านบน) VirtualTemplate_CAT1 และ VirtualTemplate_CAT2 ตัวแปร ค่าของพวกเขาบอกว่าเทมเพลตใดที่ควรใช้เพื่อสร้างหน้าเสมือนจริง เทมเพลตจะถูกเก็บไว้ในไดเรกทอรี virt_dir ในไฟล์เทมเพลตของคุณคุณสามารถใช้ตัวแปรที่สร้างขึ้นแบบไดนามิกดู [ตัวแปรภายในแหล่งข้อมูล] [] ด้านล่าง
VirtualDir_* : ตัวแปรนี้ชี้ไปที่ไดเรกทอรีเป้าหมายซึ่งควรปรากฏหน้าหน้าเว็บที่สร้างขึ้น คุณต้องตั้งค่าทุกหมวดหมู่ดังนั้นคุณต้องตั้งค่า VirtualDir_Cat1 และ VirtualDir_Cat2 ด้วย
Virtualout_* : ชื่อไฟล์เอาต์พุต ตัวอย่างเช่น virtual_cat1 = foo1.html foo2.html ในกรณีนี้คุณจะมี $ {virtualdir_cat1} /foo1.html และ $ {virtualdir_cat1} /foo2.html
VirtualReq_* : ข้อกำหนดเพิ่มเติมสำหรับหมวดหมู่เสมือน เพิ่ม $ {VirtualTemplate _*}. M4 จะถูกเพิ่มโดยอัตโนมัติ
VirtualReqRule_* : กฎการแปลงอย่างง่ายเพื่อกำหนดข้อกำหนดโดยไฟล์ กฎการแปลงถูกนำไปใช้กับองค์ประกอบของตัวแปร $ {virtualout_*} ตัวอย่างเช่น virtualReq_foo = c, .html, .dat, กฎจะแปลงทุกส่วนขยาย . html เป็นส่วนขยาย . dat : $ {destdir} /foodir/bar.html จะขึ้นอยู่กับไฟล์ foodir/bar.dat โปรดทราบว่าค่าของ ** $ {virtualdir_*} ไม่รวมอยู่โดยอัตโนมัติดังนั้นหากคุณต้องการคุณควรทำ! ระวังเกี่ยวกับการพึ่งพาซ้ำ! ดูตัวดัดแปลงที่เป็นไปได้ในคู่มือของ Make (1) !
คุณสามารถกำหนดตะขอที่ทำงานตามเหตุการณ์ที่ระบุ คุณสามารถใช้มาโคร $ {. target} ในคำจำกัดความเพราะ Make จะขยายตัวแปรนี้เมื่อจำเป็น (และไม่ได้อยู่ในคำจำกัดความ) หากคุณไม่ต้องการดูคำสั่งควรนำหน้าด้วย @ sign
hook_pre_html : มันทำงานก่อนที่จะสร้างไฟล์ HTML จากไฟล์ M4 ค่าเริ่มต้นคือ $ {msg1} การสร้าง $ {. target}
hook_post_html : มันทำงานหลังจากสร้างไฟล์ HTML จากไฟล์ M4 ค่าเริ่มต้นว่างเปล่า ตะขอนี้มีประโยชน์เช่นหากคุณต้องการตรวจสอบความถูกต้องของไฟล์ HTML (เช่นด้วยความเป็นระเบียบดู http://www.html-tidy.org/)
hook_pre_vhtml : มันทำงานก่อนที่จะสร้างไฟล์ HTML จากเทมเพลตเสมือน (ดู [virtuals] [] ด้านบน) ค่าเริ่มต้นคือ $ {msg1} การสร้างเสมือน $ {. target}
hook_post_vhtml : มันทำงานหลังจากสร้างไฟล์ HTML จากเทมเพลตเสมือน ค่าเริ่มต้นว่างเปล่า
คุณสามารถกำหนดเป้าหมายพิเศษบางอย่างใน ** config.mk 'ของคุณ
ล่วงหน้าทุกอย่าง : เป้าหมายนี้จะดำเนินการ ก่อน เป้าหมายอื่น ๆ (ยกเว้น สะอาด แน่นอน) ตัวอย่างเช่นคุณสามารถเรียกใช้สคริปต์ที่สร้างไฟล์บางไฟล์แม้แต่ไฟล์ที่ใช้ใน WPWMM4 ด้วยเป้าหมายนี้สามารถเลียนแบบคุณสมบัติแท็ก (ใช้คุณสมบัติ [virtuals] []) แนวคิดอื่นคือการสร้างตัวแปร $ {เป้าหมาย} โดยอัตโนมัติ (พร้อมคำสั่ง ค้นหา )
Clean-other : เมื่อคุณเรียกใช้เป้าหมาย ที่สะอาด (ซึ่งลบทุกอย่างในไดเรกทอรี $ {dest_dir} ) มันจะทำงานด้วย
มีเป้าหมายพิเศษบางอย่างที่จะช่วยแก้ไขข้อบกพร่องของการกำหนดค่าของคุณ
show-config : แสดงตัวแปรหลัก
Show-Hooks : แสดงตะขอ
show-targets : แสดงเป้าหมาย (รวมถึงเป้าหมายเสมือน)
show-req : แสดงเป้าหมายที่มีความต้องการของพวกเขา เป้าหมายเริ่มต้นบรรทัดโดยไม่มีช่องว่างใด ๆ ข้อกำหนดจะถูกนำหน้าด้วยสองช่องว่าง ระหว่างข้อกำหนดล่าสุดและเป้าหมายถัดไปคือการแทรกเส้นเปล่า
SHOW-VIRTUALS : เป้าหมายนี้จะแสดงเสมือนที่กำหนดและการกำหนดค่าของพวกเขา
มีตัวแปรบางอย่างที่คุณสามารถใช้และตั้งค่าในไฟล์ M4 ของคุณ
มีคำสั่งบางอย่างที่สามารถช่วยได้ พวกเขาถูกกำหนดไว้ใน 00_defines.m4 นี่คือรายการ:
_script (คำสั่ง) : เรียกใช้ คำสั่ง $ และวางเอาต์พุต ( stdout และ stderr ด้วย) มันใช้มาโคร ESYSCMD ของ M4
_layout (เลย์เอาต์, varname1, var1, varname2, var2, ... ) : โหลดโครง ร่าง $ มันใช้ M4 รวมถึง แมโคร คุณสามารถกำหนดเค้าโครงหน้าเว็บได้ที่จุดเริ่มต้นของไฟล์ต้นฉบับ คำสั่งนี้จะกำหนดตัวแปร varname1 , varname2 , ... ด้วยค่า var1 , var2
_layout_pre (pre) : $ pre พิมพ์ก่อนเนื้อหาที่รวมอยู่
_layout_post (โพสต์) : $ โพสต์ ถูกพิมพ์หลังจากเนื้อหาที่รวมอยู่
_incl (ไฟล์) : รวม ไฟล์ $ การเบี่ยงเบน คือ -1 ดังนั้นแมโครนี้ไม่ได้สร้างผลลัพธ์ใด ๆ เหมาะอย่างยิ่งที่จะโหลดไฟล์ที่มีคำจำกัดความมาโคร
_2_body (ข้อความ) : ข้อความ $ จะเข้าสู่แท็กตัว แมโครนี้รวบรวมอินพุตทั้งหมดและไม่พิมพ์อะไรเลย ด้วย _pr_body สามารถพิมพ์ (และชัดเจน) เนื้อหา
_2_head (ข้อความ) : เหมือนกับ _2_body แต่มันจะรวบรวมเป็นแท็ก หัว
_pr_body : พิมพ์และรีเซ็ตเนื้อหาที่รวบรวมโดย _2_body มันเป็นมาโคร undertive ที่ เรียบง่าย
_pr_head : คล้ายกับ _pr_body
_pr_all : มันพิมพ์ <! doctype html> <html lang = "lang"> โทร _pr_head และ _pr_body และหลังจากปิดแท็ก html
config.mk
ตัวอย่างที่สร้างขึ้นคือหน้าแรกส่วนตัวของฉัน (ในฮังการี): http://uzsolt.hu/ และไฟล์แหล่งที่มาอยู่ที่ https://svn.uzsolt.hu/uzsolt.hu/wpwmm4-uzsolt.hu/ : https://github.com/uzsolt/wpwmm4-uzsolt.hu
มันเป็นตัวอย่างที่ซับซ้อนง่ายๆ แต่มันแสดงให้เห็นถึงพลังของ WPWMM4 :) มันมี
M4 (1) ทำ (1)
Zsolt Udvari ([email protected], www.uzsolt.hu)