ນີ້ແມ່ນຄໍາສັ່ງ bmake ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
bmake - ຮັກສາຄວາມຂຶ້ນກັບໂຄງການ
ສະຫຼຸບສັງລວມ
bmake [-BeikNnqrstWwX] [-C ລະບົບ] [-D ຕົວແປ] [-d ທົງ] [-f makefile] [-I ລະບົບ]
[-J ສ່ວນຕົວ] [-j ສູງສຸດ_ວຽກ] [-m ລະບົບ] [-T ເອກະສານ] [-V ຕົວແປ] [variable=ຄ່າ]
[ເປົ້າຫມາຍ ...]
ລາຍລະອຽດ
bmake ເປັນໂຄງການທີ່ອອກແບບມາເພື່ອຄວາມງ່າຍຂອງການບໍາລຸງຮັກສາໂຄງການອື່ນໆ. ວັດສະດຸປ້ອນຂອງມັນແມ່ນ a
ບັນຊີລາຍຊື່ຂອງສະເພາະກ່ຽວກັບໄຟລ໌ທີ່ໂຄງການແລະໄຟລ໌ອື່ນໆຂຶ້ນກັບ. ຖ້າບໍ່ມີ -f
makefile makefile ທາງເລືອກແມ່ນໄດ້ຮັບ, bmake ຈະພະຍາຍາມທີ່ຈະເປີດ 'makefile'ແລ້ວ'makefile'ໃນ
ຄໍາສັ່ງເພື່ອຊອກຫາສະເພາະ. ຖ້າຫາກວ່າໄຟລ໌ '.ຂື້ນຢູ່' ມີ, ມັນໄດ້ຖືກອ່ານ (ເບິ່ງ mkdep(1)).
ໜ້າຄູ່ມືນີ້ມີຈຸດປະສົງເປັນເອກະສານອ້າງອີງເທົ່ານັ້ນ. ສໍາລັບລາຍລະອຽດຢ່າງລະອຽດ
of bmake ແລະ makefiles, ກະລຸນາອ້າງອີງເຖິງ PMake - A Tutorial.
bmake ຈະ prepend ເນື້ອໃນຂອງ ເຄື່ອງແຕ່ງກາຍ ສະພາບແວດລ້ອມຕົວແປກັບເສັ້ນຄໍາສັ່ງ
ການໂຕ້ຖຽງກ່ອນທີ່ຈະແຍກພວກມັນ.
ຕົວເລືອກມີດັ່ງນີ້:
-B ພະຍາຍາມທີ່ຈະເຂົ້າກັນໄດ້ກັບຄືນໄປບ່ອນໂດຍການປະຕິບັດ shell ດຽວຕໍ່ຄໍາສັ່ງແລະໂດຍ
ປະຕິບັດຄໍາສັ່ງເພື່ອເຮັດໃຫ້ແຫຼ່ງຂອງເສັ້ນເພິ່ງພາອາໄສຕາມລໍາດັບ.
-C ລະບົບ
ປ່ຽນເປັນ ລະບົບ ກ່ອນທີ່ຈະອ່ານ makefiles ຫຼືເຮັດຫຍັງອີກ. ຖ້າ
ຫຼາຍ -C ທາງເລືອກແມ່ນໄດ້ລະບຸໄວ້, ແຕ່ລະຄົນແມ່ນໄດ້ຮັບການຕີລາຄາທຽບກັບອັນທີ່ຜ່ານມາ:
-C / -C ແລະອື່ນໆ ເທົ່າກັບ -C / ແລະອື່ນໆ.
-D ຕົວແປ
ກໍານົດ ຕົວແປ ເປັນ 1, ໃນສະພາບການໂລກ.
-d [-] ທຸງ
ເປີດການດີບັກ, ແລະລະບຸວ່າພາກສ່ວນໃດແດ່ bmake ແມ່ນເພື່ອພິມ debugging
ຂໍ້ມູນ. ເວັ້ນເສຍແຕ່ວ່າທຸງຈະຖືກນໍາຫນ້າດ້ວຍ '-' ພວກມັນຈະຖືກເພີ່ມໃສ່ ເຄື່ອງແຕ່ງກາຍ
ສິ່ງແວດລ້ອມທີ່ປ່ຽນແປງໄດ້ແລະຈະໄດ້ຮັບການປະຕິບັດໂດຍເດັກນ້ອຍຂະບວນການເຮັດໃຫ້. ໂດຍຄ່າເລີ່ມຕົ້ນ,
ຂໍ້ມູນດີບັກຖືກພິມອອກເປັນຄວາມຜິດພາດມາດຕະຖານ, ແຕ່ວ່ານີ້ສາມາດໄດ້ຮັບການປ່ຽນແປງໂດຍນໍາໃຊ້
ໄດ້ F ທຸງດີບັກ. ຜົນໄດ້ຮັບການແກ້ບັນຫາແມ່ນ unbuffered ສະເຫມີ; ນອກຈາກນັ້ນ, ຖ້າ
ການດີບັ໊ກຖືກເປີດໃຊ້ງານແລ້ວ ແຕ່ການດີບັ໊ກອອກບໍ່ໄດ້ຖືກສົ່ງໄປຫາຜົນຜະລິດມາດຕະຖານ, ຈາກນັ້ນ
ຜົນຜະລິດມາດຕະຖານແມ່ນເສັ້ນ buffered. ທົງ ແມ່ນໜຶ່ງ ຫຼືຫຼາຍອັນຕໍ່ໄປນີ້:
A ພິມຂໍ້ມູນ debugging ທີ່ເປັນໄປໄດ້ທັງຫມົດ; ເທົ່າກັບການລະບຸທັງຫມົດຂອງ
ທຸງ debugging.
a ພິມຂໍ້ມູນການດີບັ໊ກກ່ຽວກັບການຊອກຫາແຟ້ມຈັດເກັບ ແລະຖານຄວາມຈໍາ.
C ພິມຂໍ້ມູນການດີບັກກ່ຽວກັບໄດເລກະທໍລີທີ່ເຮັດວຽກໃນປະຈຸບັນ.
c ພິມຂໍ້ມູນການດີບັກກ່ຽວກັບການປະເມີນເງື່ອນໄຂ.
d ພິມຂໍ້ມູນການດີບັ໊ກກ່ຽວກັບການຊອກຫາໄດເລກະທໍລີ ແລະຖານຄວາມຈໍາ.
e ພິມຂໍ້ມູນການດີບັກກ່ຽວກັບຄໍາສັ່ງ ແລະເປົ້າໝາຍທີ່ລົ້ມເຫລວ.
F[+]ຊື່ເອກະສານ
ລະບຸບ່ອນທີ່ຜົນການດີບັກຖືກຂຽນ. ນີ້ຕ້ອງເປັນທຸງສຸດທ້າຍ,
ເນື່ອງຈາກວ່າມັນບໍລິໂພກສ່ວນທີ່ເຫຼືອຂອງການໂຕ້ຖຽງ. ຖ້າຫາກວ່າລັກສະນະ
ທັນທີຫຼັງຈາກທຸງ 'F' ແມ່ນ '+', ຫຼັງຈາກນັ້ນໄຟລ໌ຈະຖືກເປີດໃນ
ຮູບແບບການເພີ່ມເຕີມ; ຖ້າບໍ່ດັ່ງນັ້ນໄຟລ໌ຈະຖືກຂຽນທັບ. ຖ້າຊື່ໄຟລ໌ແມ່ນ
'stdout' ຫຼື 'stderr' ຫຼັງຈາກນັ້ນ debugging output ຈະຖືກຂຽນເປັນມາດຕະຖານ
output ຫຼື standard error output file descriptors ຕາມລໍາດັບ (ແລະ '+'
ທາງເລືອກບໍ່ມີຜົນກະທົບ). ຖ້າບໍ່ດັ່ງນັ້ນ, ຜົນຜະລິດຈະຖືກຂຽນໃສ່ຊື່
ໄຟລ໌. ຖ້າຊື່ໄຟລ໌ສິ້ນສຸດ '.%d' ຫຼັງຈາກນັ້ນ '%d' ຈະຖືກແທນທີ່ດ້ວຍ pid.
f ພິມຂໍ້ມູນການດີບັກກ່ຽວກັບການປະເມີນ loop.
g1 ພິມເສັ້ນສະແດງການປ້ອນຂໍ້ມູນກ່ອນທີ່ຈະເຮັດສິ່ງໃດ.
g2 ພິມເສັ້ນສະແດງການປ້ອນຂໍ້ມູນຫຼັງຈາກເຮັດທຸກຢ່າງ, ຫຼືກ່ອນທີ່ຈະອອກດ້ວຍຄວາມຜິດພາດ.
g3 ພິມກຣາຟການປ້ອນຂໍ້ມູນກ່ອນທີ່ຈະອອກດ້ວຍຄວາມຜິດພາດ.
j ພິມຂໍ້ມູນການດີບັກກ່ຽວກັບການແລ່ນ Shell ຫຼາຍອັນ.
l ພິມຄໍາສັ່ງໃນ Makefiles ບໍ່ວ່າພວກມັນຈະຖືກນໍາຫນ້າຫຼືບໍ່
ໂດຍ '@' ຫຼືທຸງ "ງຽບ" ອື່ນໆ. ເອີ້ນອີກຊື່ໜຶ່ງວ່າ "ສຽງດັງ".
M ພິມຂໍ້ມູນການດີບັກກ່ຽວກັບການຕັດສິນໃຈຂອງໂຫມດ "meta" ກ່ຽວກັບເປົ້າໝາຍ.
m ພິມຂໍ້ມູນການແກ້ບັນຫາກ່ຽວກັບການສ້າງເປົ້າໝາຍ, ລວມທັງການດັດແກ້
ວັນທີ.
n ຢ່າລຶບສະຄຣິບຄຳສັ່ງຊົ່ວຄາວທີ່ສ້າງຂຶ້ນໃນເວລາແລ່ນຄຳສັ່ງ.
ສະຄຣິບຊົ່ວຄາວເຫຼົ່ານີ້ຖືກສ້າງຂື້ນໃນໄດເລກະທໍລີທີ່ອ້າງອີງໂດຍ
ຕົວແປສະພາບແວດລ້ອມ TMPDIR, ຫຼືໃນ / tmp ຖ້າ TMPDIR ບໍ່ຖືກຕັ້ງ ຫຼືຕັ້ງເປັນ
ສະຕຣິງຫວ່າງເປົ່າ. ສະຄຣິບຊົ່ວຄາວຖືກສ້າງຂື້ນໂດຍ mkstemp(3), ແລະມີ
ຊື່ຂອງແບບຟອມ ເຮັດໃຫ້XXXXXX. ຫມາຍເຫດ: ນີ້ສາມາດສ້າງຫຼາຍໄຟລ໌ໃນ TMPDIR ຫຼື
/ tmp, ສະນັ້ນໃຊ້ດ້ວຍຄວາມລະມັດລະວັງ.
p ພິມຂໍ້ມູນການດີບັກກ່ຽວກັບການວິເຄາະ makefile.
s ພິມຂໍ້ມູນການດີບັກກ່ຽວກັບກົດລະບຽບການຫັນປ່ຽນ suffix.
t ພິມຂໍ້ມູນການແກ້ບັນຫາກ່ຽວກັບການຮັກສາລາຍຊື່ເປົ້າໝາຍ.
V ບັງຄັບ -V ທາງເລືອກໃນການພິມຄ່າດິບຂອງຕົວແປ.
v ພິມຂໍ້ມູນການດີບັກກ່ຽວກັບການມອບໝາຍຕົວແປ.
x ດໍາເນີນການຄໍາສັ່ງ shell ກັບ -x ດັ່ງນັ້ນຄໍາສັ່ງຕົວຈິງຖືກພິມອອກຕາມທີ່ເຂົາເຈົ້າເປັນ
ປະຕິບັດ.
-e ລະບຸວ່າຕົວແປສະພາບແວດລ້ອມຈະລົບລ້າງການມອບໝາຍມະຫາພາກພາຍໃນ makefiles.
-f makefile
ລະບຸ makefile ທີ່ຈະອ່ານແທນທີ່ຈະເປັນຄ່າເລີ່ມຕົ້ນ 'makefile'. ຖ້າ makefile ແມ່ນ '-',
ການປ້ອນຂໍ້ມູນມາດຕະຖານຖືກອ່ານ. ຫຼາຍ makefiles ອາດຈະຖືກກໍານົດ, ແລະຖືກອ່ານຢູ່ໃນ
ຄໍາສັ່ງທີ່ລະບຸໄວ້.
-I ລະບົບ
ລະບຸໄດເລກະທໍລີທີ່ຈະຄົ້ນຫາ makefiles ແລະລວມເອົາ makefiles. ໄດ້
ລະບົບ makefile directory (ຫຼືໄດເລກະທໍລີ, ເບິ່ງ -m ທາງເລືອກ) ແມ່ນອັດຕະໂນມັດ
ລວມເປັນສ່ວນຫນຶ່ງຂອງບັນຊີລາຍການນີ້.
-i ບໍ່ສົນໃຈການອອກທີ່ບໍ່ແມ່ນສູນຂອງຄໍາສັ່ງ shell ໃນ makefile. ເທົ່າກັບການລະບຸ
'-' ກ່ອນແຕ່ລະເສັ້ນຄໍາສັ່ງໃນ makefile.
-J ສ່ວນຕົວ
ທາງເລືອກນີ້ຄວນ ບໍ່ ຖືກລະບຸໂດຍຜູ້ໃຊ້.
ໃນເວລາທີ່ j ທາງເລືອກແມ່ນໄດ້ຮັບການນໍາໃຊ້ໃນການກໍ່ສ້າງ recursive, ທາງເລືອກນີ້ແມ່ນຜ່ານການເຮັດໃຫ້
ເດັກນ້ອຍເຮັດໃຫ້ຂະບວນການຜະລິດທັງຫມົດໃນການກໍ່ສ້າງຮ່ວມມືເພື່ອຫຼີກເວັ້ນການ
overloading ລະບົບ.
-j ສູງສຸດ_ວຽກ
ລະບຸຈໍານວນວຽກສູງສຸດທີ່ bmake ອາດຈະແລ່ນໃນເວລາໃດນຶ່ງ. ໄດ້
ມູນຄ່າຖືກບັນທຶກໄວ້ໃນ .ເຮັດ.ວຽກ. ປິດໂໝດຄວາມເຂົ້າກັນໄດ້, ເວັ້ນເສຍແຕ່ວ່າ B ທຸງແມ່ນ
ຍັງລະບຸ. ເມື່ອປິດໂໝດຄວາມເຂົ້າກັນໄດ້, ຄຳສັ່ງທັງໝົດທີ່ກ່ຽວຂ້ອງກັບ a
ເປົ້າໝາຍຖືກປະຕິບັດຢູ່ໃນການຮຽກຮ້ອງຂອງເປືອກດຽວ ກົງກັນຂ້າມກັບແບບດັ້ງເດີມ
ການຮຽກຮ້ອງ shell ຕໍ່ແຖວ. ນີ້ສາມາດທໍາລາຍສະຄິບແບບດັ້ງເດີມທີ່ມີການປ່ຽນແປງ
ໄດເລກະທໍລີຢູ່ໃນແຕ່ລະ invocation ຄໍາສັ່ງແລະຫຼັງຈາກນັ້ນຄາດວ່າຈະເລີ່ມຕົ້ນດ້ວຍສົດ
ສະພາບແວດລ້ອມໃນແຖວຕໍ່ໄປ. ມັນມີປະສິດທິພາບຫຼາຍໃນການແກ້ໄຂສະຄຣິບແທນ
ກ່ວາເປີດຄວາມເຂົ້າກັນໄດ້ກັບຫຼັງ.
-k ສືບຕໍ່ການປຸງແຕ່ງຫຼັງຈາກພົບຂໍ້ຜິດພາດ, ແຕ່ວ່າພຽງແຕ່ຢູ່ໃນເປົ້າຫມາຍເຫຼົ່ານັ້ນເທົ່ານັ້ນ
ບໍ່ຂຶ້ນກັບເປົ້າຫມາຍທີ່ການສ້າງທີ່ເຮັດໃຫ້ເກີດຄວາມຜິດພາດ.
-m ລະບົບ
ລະບຸໄດເລກະທໍລີທີ່ຈະຄົ້ນຫາ sys.mk ແລະ makefiles ລວມຜ່ານ
⟨ເອກະສານ⟩ແບບປະກອບມີຄຳຖະແຫຼງ. ໄດ້ -m ທາງເລືອກສາມາດນໍາໃຊ້ຫຼາຍຄັ້ງເພື່ອສ້າງເປັນ
ເສັ້ນທາງຄົ້ນຫາ. ເສັ້ນທາງນີ້ຈະລົບລ້າງລະບົບເລີ່ມຕົ້ນປະກອບມີເສັ້ນທາງ:
/usr/share/mk. ນອກຈາກນັ້ນ, ລະບົບຈະລວມເອົາເສັ້ນທາງໄປຫາການຄົ້ນຫາ
ເສັ້ນທາງທີ່ໃຊ້ສໍາລັບ "ເອກະສານ"-style ປະກອບມີຄໍາຖະແຫຼງການ (ເບິ່ງ -I ທາງເລືອກ).
ຖ້າໄຟລ໌ຫຼືຊື່ໄດເລກະທໍລີຢູ່ໃນ -m ການໂຕ້ຖຽງ (ຫຼືສະພາບແວດລ້ອມ MAKESYSPATH
variable) ເລີ່ມຕົ້ນດ້ວຍ string ".../" ຈາກນັ້ນ bmake ຈະຊອກຫາທີ່ລະບຸໄວ້
ໄຟລ໌ຫຼືໄດເລກະທໍລີທີ່ມີຊື່ຢູ່ໃນສ່ວນທີ່ຍັງເຫຼືອຂອງສະຕຣິງອາກິວເມັນ. ການຄົ້ນຫາ
ເລີ່ມຕົ້ນດ້ວຍໄດເລກະທໍລີປະຈຸບັນຂອງ Makefile ແລະຫຼັງຈາກນັ້ນເຮັດວຽກຂຶ້ນໄປສູ່ການ
ຮາກຂອງລະບົບໄຟລ໌. ຖ້າການຄົ້ນຫາປະສົບຜົນສໍາເລັດ, ຫຼັງຈາກນັ້ນໄດເລກະທໍລີຜົນໄດ້ຮັບ
ແທນທີ່ ".../" ສະເພາະໃນ -m ການໂຕ້ຖຽງ. ຖ້າຖືກນໍາໃຊ້, ຄຸນນະສົມບັດນີ້ອະນຸຍາດໃຫ້
bmake ເພື່ອຊອກຫາໄດ້ຢ່າງງ່າຍດາຍໃນຕົ້ນໄມ້ແຫຼ່ງປະຈຸບັນສໍາລັບໄຟລ໌ sys.mk ປັບແຕ່ງ (ເຊັ່ນ:
ໂດຍໃຊ້ ".../mk/sys.mk" ເປັນການໂຕ້ຖຽງ).
-n ສະແດງຄໍາສັ່ງທີ່ຈະຖືກປະຕິບັດ, ແຕ່ບໍ່ໄດ້ປະຕິບັດຕົວຈິງ
ເວັ້ນເສຍແຕ່ວ່າເປົ້າຫມາຍແມ່ນຂຶ້ນກັບ .MAKE ແຫຼ່ງພິເສດ (ເບິ່ງຂ້າງລຸ່ມນີ້).
-N ສະແດງຄໍາສັ່ງທີ່ຈະຖືກປະຕິບັດ, ແຕ່ບໍ່ໄດ້ປະຕິບັດຕົວຈິງໃດໆ
ຂອງພວກເຂົາ; ເປັນປະໂຫຍດສໍາລັບການ debugging makefiles ລະດັບເທິງໂດຍບໍ່ມີການ descending ເຂົ້າໄປໃນ
ໄດເລກະທໍລີຍ່ອຍ.
-q ຢ່າປະຕິບັດຄໍາສັ່ງໃດໆ, ແຕ່ອອກ 0 ຖ້າເປົ້າຫມາຍທີ່ກໍານົດໄວ້ແມ່ນທັນສະໄຫມແລະ
1, ຖ້າບໍ່ດັ່ງນັ້ນ.
-r ຢ່າໃຊ້ກົດລະບຽບທີ່ລະບຸໄວ້ໃນລະບົບ makefile.
-s ຢ່າສະທ້ອນຄໍາສັ່ງໃດໆຍ້ອນວ່າພວກມັນຖືກປະຕິບັດ. ເທົ່າກັບການລະບຸ '@'ກ່ອນ
ແຕ່ລະເສັ້ນຄໍາສັ່ງໃນ makefile.
-T ຮ່ອງຮອຍ
ເມື່ອໃຊ້ກັບ -j ທຸງ, ຕື່ມການບັນທຶກການຕິດຕາມໃສ່ ຮ່ອງຮອຍ ສໍາລັບແຕ່ລະວຽກເລີ່ມຕົ້ນ
ແລະສໍາເລັດ.
-t ແທນທີ່ຈະສ້າງເປົ້າຫມາຍໃຫມ່ຕາມທີ່ລະບຸໄວ້ໃນ makefile, ສ້າງມັນຫຼືປັບປຸງ
ເວລາການດັດແປງຂອງມັນເພື່ອເຮັດໃຫ້ມັນປະກົດຂຶ້ນ-ທັນສະໄຫມ.
-V ຕົວແປ
ພິມ bmakeແນວຄວາມຄິດຂອງມູນຄ່າຂອງ ຕົວແປ, ໃນສະພາບການທົ່ວໂລກ. ບໍ່ສ້າງ
ເປົ້າໝາຍໃດນຶ່ງ. ຫຼາຍຕົວຢ່າງຂອງຕົວເລືອກນີ້ອາດຈະຖືກລະບຸ; ຕົວແປຈະ
ພິມອອກໜຶ່ງແຖວ, ໂດຍມີແຖວຫວ່າງເປົ່າສຳລັບແຕ່ລະຕົວແປ null ຫຼືບໍ່ໄດ້ກຳນົດ. ຖ້າ
ຕົວແປ ມີ '$' ຈາກນັ້ນຄ່າຈະຖືກຂະຫຍາຍກ່ອນທີ່ຈະພິມ.
-W ປະຕິບັດຄໍາເຕືອນໃດໆໃນລະຫວ່າງການວິເຄາະ makefile ເປັນຄວາມຜິດພາດ.
-w ພິມເຂົ້າແລະອອກຂໍ້ຄວາມລະບົບ, ກ່ອນແລະຫຼັງການປະມວນຜົນ.
-X ຢ່າສົ່ງອອກຕົວແປທີ່ສົ່ງຜ່ານເສັ້ນຄໍາສັ່ງໄປສູ່ສະພາບແວດລ້ອມເປັນສ່ວນບຸກຄົນ.
ຕົວແປທີ່ສົ່ງຜ່ານເສັ້ນຄໍາສັ່ງແມ່ນຍັງຖືກສົ່ງອອກຜ່ານ ເຄື່ອງແຕ່ງກາຍ
ສະພາບແວດລ້ອມປ່ຽນແປງ. ທາງເລືອກນີ້ອາດຈະເປັນປະໂຫຍດໃນລະບົບທີ່ມີຂອບເຂດຈໍາກັດຫນ້ອຍ
ກ່ຽວກັບຂະຫນາດຂອງການໂຕ້ຖຽງຄໍາສັ່ງ.
variable=ຄ່າ
ກໍານົດຄ່າຂອງຕົວແປ ຕົວແປ to ມູນຄ່າ. ໂດຍປົກກະຕິ, ມູນຄ່າທັງຫມົດຖືກສົ່ງກັບ
ເສັ້ນຄໍາສັ່ງຍັງຖືກສົ່ງອອກໄປຫາ sub-maker ໃນສະພາບແວດລ້ອມ. ໄດ້ -X ທຸງ
ປິດການປະພຶດນີ້. ການມອບໝາຍຕົວແປຄວນປະຕິບັດຕາມຕົວເລືອກສຳລັບ POSIX
ຄວາມເຂົ້າກັນໄດ້ແຕ່ບໍ່ມີການບັງຄັບໃຊ້ຄໍາສັ່ງ.
ມີເຈັດປະເພດທີ່ແຕກຕ່າງກັນຂອງສາຍໃນ makefile: ຂໍ້ມູນຈໍາເພາະຂຶ້ນກັບໄຟລ໌,
ຄໍາສັ່ງ shell, ການມອບຫມາຍຕົວແປ, ປະກອບມີຄໍາຖະແຫຼງ, ຄໍາສັ່ງຕາມເງື່ອນໄຂ, ສໍາລັບ loops,
ແລະ ຄຳ ເຫັນ.
ໂດຍທົ່ວໄປແລ້ວ, ແຖວອາດຈະສືບຕໍ່ຈາກແຖວໜຶ່ງໄປຫາແຖວຕໍ່ໄປໂດຍການສິ້ນສຸດພວກມັນດ້ວຍ backslash
('\'). ຕົວອັກສອນແຖວໃໝ່ຕໍ່ທ້າຍ ແລະຊ່ອງຫວ່າງເບື້ອງຕົ້ນໃນແຖວຕໍ່ໄປນີ້ແມ່ນ
ບີບອັດເຂົ້າໄປໃນຊ່ອງດຽວ.
ເອກະສານ ແຕກຕ່າງ ນະລັກສະນະ
ເສັ້ນການເພິ່ງພາອາໄສປະກອບດ້ວຍໜຶ່ງ ຫຼືຫຼາຍເປົ້າໝາຍ, ຕົວດຳເນີນການ, ແລະແຫຼ່ງສູນ ຫຼືຫຼາຍກວ່ານັ້ນ.
ນີ້ສ້າງຄວາມສໍາພັນທີ່ເປົ້າຫມາຍ "ຂຶ້ນກັບ" ແຫຼ່ງຂໍ້ມູນແລະປົກກະຕິແລ້ວ
ສ້າງຂຶ້ນຈາກເຂົາເຈົ້າ. ການພົວພັນທີ່ແນ່ນອນລະຫວ່າງເປົ້າຫມາຍແລະແຫຼ່ງແມ່ນຖືກກໍານົດ
ໂດຍຜູ້ປະກອບການທີ່ແຍກພວກມັນ. ສາມປະຕິບັດການດັ່ງຕໍ່ໄປນີ້:
: ເປົ້າໝາຍຖືກພິຈາລະນາວ່າລ້າສະໄໝ ຖ້າເວລາການດັດແກ້ຂອງມັນໜ້ອຍກວ່າອັນໃດນຶ່ງ
ຂອງແຫຼ່ງຂໍ້ມູນຂອງຕົນ. ແຫຼ່ງທີ່ມາຂອງເປົ້າໝາຍສະສົມຜ່ານສາຍການເພິ່ງພາອາໄສເມື່ອອັນນີ້
ປະຕິບັດການຖືກນໍາໃຊ້. ເປົ້າຫມາຍໄດ້ຖືກໂຍກຍ້າຍອອກຖ້າຫາກວ່າ bmake ຂັດຂວາງ.
! ເປົ້າໝາຍຖືກສ້າງໃໝ່ສະເໝີ, ແຕ່ບໍ່ແມ່ນຈົນກວ່າທຸກແຫຼ່ງໄດ້ຮັບການກວດກາ ແລະສ້າງຄືນໃໝ່.
ສ້າງຂຶ້ນຕາມຄວາມຈໍາເປັນ. ແຫຼ່ງທີ່ມາຂອງເປົ້າໝາຍສະສົມຜ່ານສາຍການເພິ່ງພາອາໄສເມື່ອອັນນີ້
ປະຕິບັດການຖືກນໍາໃຊ້. ເປົ້າຫມາຍໄດ້ຖືກໂຍກຍ້າຍອອກຖ້າຫາກວ່າ bmake ຂັດຂວາງ.
:: ຖ້າບໍ່ມີແຫຼ່ງໃດຖືກລະບຸ, ເປົ້າໝາຍຈະຖືກສ້າງໃໝ່ສະເໝີ. ຖ້າບໍ່ດັ່ງນັ້ນ, ເປົ້າຫມາຍແມ່ນ
ພິຈາລະນາວ່າລ້າສະໄຫມຖ້າຫາກວ່າແຫຼ່ງໃດຂອງມັນໄດ້ຖືກດັດແກ້ຫຼາຍກ່ວາບໍ່ດົນມານີ້
ເປົ້າຫມາຍ. ແຫຼ່ງຂໍ້ມູນສໍາລັບເປົ້າຫມາຍບໍ່ສະສົມຫຼາຍກວ່າເສັ້ນການເພິ່ງພາອາໄສໃນເວລາທີ່ນີ້
ປະຕິບັດການຖືກນໍາໃຊ້. ເປົ້າຫມາຍຈະບໍ່ຖືກໂຍກຍ້າຍອອກຖ້າຫາກວ່າ bmake ຂັດຂວາງ.
ເປົ້າໝາຍ ແລະແຫຼ່ງທີ່ມາອາດມີຄ່າຂອງ shell wildcard '?', '*', '[]', ແລະ '{}'. ໄດ້
ຄ່າ '?', '*', ແລະ '[]' ອາດຈະຖືກໃຊ້ເປັນສ່ວນໜຶ່ງຂອງອົງປະກອບສຸດທ້າຍຂອງເປົ້າໝາຍ ຫຼື
ແຫຼ່ງ, ແລະຕ້ອງຖືກນໍາໃຊ້ເພື່ອອະທິບາຍໄຟລ໌ທີ່ມີຢູ່ແລ້ວ. ຄ່າ '{}' ບໍ່ຈໍາເປັນຕ້ອງເປັນ
ໃຊ້ເພື່ອອະທິບາຍໄຟລ໌ທີ່ມີຢູ່. ການຂະຫຍາຍຢູ່ໃນລໍາດັບໄດເລກະທໍລີ, ບໍ່ແມ່ນຕາມຕົວອັກສອນ
ເຮັດຢູ່ໃນແກະ.
SHELL ສາມາດ
ແຕ່ລະເປົ້າຫມາຍອາດຈະກ່ຽວຂ້ອງກັບມັນຫນຶ່ງຫຼືຫຼາຍເສັ້ນຄໍາສັ່ງ shell, ປົກກະຕິແລ້ວໃຊ້
ເພື່ອສ້າງເປົ້າຫມາຍ. ແຕ່ລະສາຍໃນ script ນີ້ ຕ້ອງ ຖືກນໍາຫນ້າດ້ວຍແຖບ. (ສຳລັບ
ເຫດຜົນທາງປະຫວັດສາດ, ຊ່ອງຫວ່າງບໍ່ໄດ້ຮັບການຍອມຮັບ.) ໃນຂະນະທີ່ເປົ້າຫມາຍສາມາດປາກົດຢູ່ໃນຫຼາຍຂື້ນ
ສາຍຖ້າຕ້ອງການ, ໂດຍຄ່າເລີ່ມຕົ້ນພຽງແຕ່ຫນຶ່ງໃນກົດລະບຽບເຫຼົ່ານີ້ອາດຈະຖືກປະຕິບັດຕາມໂດຍສະຄິບສ້າງ.
ຖ້າວ່າ::' operator ຖືກນໍາໃຊ້, ຢ່າງໃດກໍຕາມ, ກົດລະບຽບທັງຫມົດອາດຈະປະກອບມີ scripts ແລະ scripts ແມ່ນ
ປະຕິບັດຕາມຄໍາສັ່ງທີ່ພົບເຫັນ.
ແຕ່ລະເສັ້ນແມ່ນໄດ້ຮັບການປະຕິບັດເປັນຄໍາສັ່ງແກະແຍກຕ່າງຫາກ, ເວັ້ນເສຍແຕ່ທີ່ສຸດຂອງເສັ້ນແມ່ນຫນີດ້ວຍ a
backslash ('\') ໃນກໍລະນີທີ່ເສັ້ນນັ້ນແລະແຖວຕໍ່ໄປຖືກລວມເຂົ້າກັນ. ຖ້າລັກສະນະທໍາອິດ
ຂອງຄໍາສັ່ງແມ່ນການປະສົມປະສານຂອງ '@','+', ຫຼື '-', ຄໍາສັ່ງໄດ້ຖືກປະຕິບັດເປັນພິເສດ. ກ
'@' ເຮັດໃຫ້ຄໍາສັ່ງບໍ່ຖືກສະທ້ອນກ່ອນທີ່ຈະຖືກປະຕິບັດ. A '+' ເຮັດໃຫ້ຄໍາສັ່ງທີ່ຈະ
ຈະຖືກປະຕິບັດເຖິງແມ່ນວ່າໃນເວລາທີ່ -n ແມ່ນໃຫ້. ນີ້ແມ່ນຄ້າຍຄືກັນກັບຜົນກະທົບຂອງ .MAKE ພິເສດ
ແຫຼ່ງ, ຍົກເວັ້ນວ່າຜົນກະທົບສາມາດຖືກຈໍາກັດຢູ່ໃນແຖວດຽວຂອງສະຄິບ. A '-'ໃນ
ໂໝດຄວາມເຂົ້າກັນໄດ້ເຮັດໃຫ້ສະຖານະການອອກທີ່ບໍ່ແມ່ນສູນຂອງແຖວຄຳສັ່ງຖືກລະເລີຍ.
ເມື່ອໃດ bmake ແມ່ນດໍາເນີນການໃນຮູບແບບວຽກທີ່ມີ -j ສູງສຸດ_ວຽກ, script ທັງຫມົດສໍາລັບເປົ້າຫມາຍແມ່ນປ້ອນກັບ
ຕົວຢ່າງດຽວຂອງແກະ. ໃນໂຫມດຄວາມເຂົ້າກັນໄດ້ (ບໍ່ແມ່ນວຽກ), ແຕ່ລະຄໍາສັ່ງແມ່ນດໍາເນີນການໃນ a
ຂະບວນການແຍກຕ່າງຫາກ. ຖ້າຄໍາສັ່ງປະກອບດ້ວຍຕົວອັກສອນ meta ຂອງແກະໃດໆ
('#=|^(){};&<>*?[]:$`\\n') ມັນຈະຖືກສົ່ງໄປຫາແກະ; ຖ້າບໍ່ດັ່ງນັ້ນ bmake ຈະພະຍາຍາມ
ການປະຕິບັດໂດຍກົງ. ຖ້າເສັ້ນເລີ່ມຕົ້ນດ້ວຍ '-' ແລະ shell ໄດ້ເປີດໃຊ້ ErrCtl ຈາກນັ້ນຄວາມລົ້ມເຫຼວ
ຂອງເສັ້ນຄໍາສັ່ງຈະຖືກລະເລີຍຄືກັບຢູ່ໃນຮູບແບບການເຂົ້າກັນໄດ້. ຖ້າບໍ່ດັ່ງນັ້ນ '-' ຜົນກະທົບຕໍ່
ວຽກທັງໝົດ; script ຈະຢຸດຢູ່ທີ່ຄໍາສັ່ງທໍາອິດທີ່ລົ້ມເຫລວ, ແຕ່ເປົ້າຫມາຍຈະ
ບໍ່ໄດ້ຖືວ່າລົ້ມເຫລວ.
Makefiles ຄວນໄດ້ຮັບການລາຍລັກອັກສອນດັ່ງນັ້ນຮູບແບບຂອງ bmake ການດໍາເນີນງານບໍ່ໄດ້ປ່ຽນແປງຂອງພວກເຂົາ
ພຶດຕິກຳ. ຕົວຢ່າງ, ຄໍາສັ່ງໃດໆທີ່ຕ້ອງການໃຊ້ "cd" ຫຼື "chdir" ໂດຍບໍ່ມີທ່າແຮງ
ການປ່ຽນແປງໄດເລກະທໍລີສໍາລັບຄໍາສັ່ງຕໍ່ໄປຄວນຈະຖືກໃສ່ໃນວົງເລັບເພື່ອໃຫ້ມັນດໍາເນີນການ
ໃນ subshell ເປັນ. ເພື່ອບັງຄັບໃຫ້ໃຊ້ຫນຶ່ງແກະ, ຫນີເສັ້ນແຕກເພື່ອໃຫ້ໄດ້
script ທັງຫມົດຫນຶ່ງຄໍາສັ່ງ. ຍົກຕົວຢ່າງ:
ຫຼີກເວັ້ນ-chdir-ຜົນກະທົບຂ້າງຄຽງ:
@echo ການກໍ່ສ້າງ $@ ໃນ `pwd`
@(cd ${.CURDIR} && ${MAKE} $@)
@echo ກັບໄປທີ່ `pwd`
ຮັບປະກັນ-ຫນຶ່ງ-shell-ໂດຍບໍ່ຄໍານຶງເຖິງຂອງໂຫມດ:
@echo ການກໍ່ສ້າງ $@ ໃນ `pwd`; \
(cd ${.CURDIR} && ${MAKE} $@); \
echo ກັບຄືນໄປບ່ອນໃນ `pwd`
ນັບຕັ້ງແຕ່ bmake ຈະ chdir(2) ເຖິງ '.OBJDIR' ກ່ອນທີ່ຈະປະຕິບັດເປົ້າຫມາຍໃດໆ, ຂະບວນການເດັກແຕ່ລະຄົນ
ເລີ່ມຕົ້ນດ້ວຍສິ່ງນັ້ນເປັນໄດເລກະທໍລີທີ່ເຮັດວຽກໃນປະຈຸບັນຂອງມັນ.
ຄວາມເປັນໄປໄດ້ ວຽກງານ
ຕົວແປໃນການຜະລິດແມ່ນຄ້າຍຄືກັບຕົວແປໃນແກະ, ແລະ, ຕາມປະເພນີ, ປະກອບດ້ວຍທັງຫມົດ
ຕົວອັກສອນຕົວພິມໃຫຍ່.
ການປ່ຽນແປງ ການມອບຫມາຍ ຕົວປ່ຽນແປງ
ຫ້າຕົວປະຕິບັດການທີ່ສາມາດຖືກນໍາໃຊ້ເພື່ອກໍານົດຄ່າໃຫ້ກັບຕົວແປມີດັ່ງນີ້:
= ກໍານົດຄ່າໃຫ້ກັບຕົວແປ. ຄ່າໃດນຶ່ງກ່ອນໜ້ານັ້ນຖືກລົບລ້າງ.
+= ຕື່ມຂໍ້ມູນໃສ່ກັບຄ່າປັດຈຸບັນຂອງຕົວແປ.
?= ກໍານົດຄ່າໃຫ້ກັບຕົວແປຖ້າມັນບໍ່ໄດ້ຖືກກໍານົດໄວ້ແລ້ວ.
:= ມອບຫມາຍດ້ວຍການຂະຫຍາຍ, ie ຂະຫຍາຍມູນຄ່າກ່ອນທີ່ຈະມອບຫມາຍໃຫ້ຕົວແປ.
ໂດຍປົກກະຕິ, ການຂະຫຍາຍບໍ່ໄດ້ເຮັດຈົນກ່ວາຕົວແປຖືກອ້າງອີງ. ຫມາຍເຫດ: ເອກະສານອ້າງອີງ
ກັບຕົວແປທີ່ບໍ່ໄດ້ກໍານົດແມ່ນ ບໍ່ ຂະຫຍາຍ. ນີ້ສາມາດເຮັດໃຫ້ເກີດບັນຫາໃນເວລາທີ່ຕົວແປ
ຕົວແກ້ໄຂແມ່ນໃຊ້.
!= ຂະຫຍາຍມູນຄ່າແລະສົ່ງມັນໄປຫາ shell ສໍາລັບການປະຕິບັດແລະມອບຫມາຍຜົນໄດ້ຮັບໃຫ້ກັບ the
ຕົວແປ. ແຖວໃໝ່ໃນຜົນໄດ້ຮັບຈະຖືກແທນທີ່ດ້ວຍຍະຫວ່າງ.
ຊ່ອງຫວ່າງກ່ອນການມອບໝາຍ ມູນຄ່າ ຖືກໂຍກຍ້າຍ; ຖ້າຄ່າກຳລັງຖືກຕໍ່ທ້າຍ, a
ຊ່ອງຫວ່າງດຽວແມ່ນໃສ່ລະຫວ່າງເນື້ອຫາກ່ອນໜ້າຂອງຕົວແປ ແລະສ່ວນຕໍ່ທ້າຍ
ມູນຄ່າ.
ຕົວແປຖືກຂະຫຍາຍໂດຍອ້ອມຮອບຊື່ຕົວແປດ້ວຍວົງເລັບໂຄ້ງ ('{}') ຫຼື
ວົງເລັບ ('()') ແລະນຳໜ້າດ້ວຍເຄື່ອງໝາຍເງິນໂດລາ ('$'). ຖ້າຊື່ຕົວແປມີ
ມີພຽງແຕ່ຕົວອັກສອນດຽວ, ວົງເລັບຫຼືວົງເລັບອ້ອມຂ້າງແມ່ນບໍ່ຈໍາເປັນ. ສັ້ນກວ່ານີ້
ແບບຟອມແມ່ນບໍ່ແນະນໍາ.
ຖ້າຊື່ຕົວແປມີເງິນໂດລາ, ຫຼັງຈາກນັ້ນຊື່ຕົວມັນເອງຖືກຂະຫຍາຍກ່ອນ. ນີ້ອະນຸຍາດໃຫ້
ຊື່ຕົວແປເກືອບທັງໝົດ, ແນວໃດກໍ່ຕາມຊື່ທີ່ມີເງິນໂດລາ, ວົງເລັບ, ວົງເລັບ, ຫຼື
ຊ່ອງຫວ່າງແມ່ນຫຼີກເວັ້ນໄດ້ດີທີ່ສຸດ!
ຖ້າຜົນຂອງການຂະຫຍາຍຕົວແປມີເຄື່ອງຫມາຍເງິນໂດລາ ('$') ຂໍ້ຄວາມຈະຖືກຂະຫຍາຍ
ອີກເທື່ອຫນຶ່ງ.
ການທົດແທນຕົວແປເກີດຂຶ້ນໃນເວລາສາມທີ່ແຕກຕ່າງກັນ, ຂຶ້ນກັບບ່ອນທີ່ຕົວແປແມ່ນ
ຖືກ ນຳ ໃຊ້.
1. ຕົວແປໃນສາຍການເພິ່ງພາອາໄສແມ່ນຂະຫຍາຍອອກເມື່ອອ່ານແຖວ.
2. ຕົວແປໃນຄໍາສັ່ງ shell ແມ່ນຂະຫຍາຍເມື່ອຄໍາສັ່ງ shell ຖືກປະຕິບັດ.
3. ຕົວແປ ".for" loop index ແມ່ນຂະຫຍາຍໃນແຕ່ລະ loop iteration. ໃຫ້ສັງເກດວ່າອື່ນໆ
ຕົວແປບໍ່ໄດ້ຖືກຂະຫຍາຍຢູ່ໃນ loops ດັ່ງນັ້ນລະຫັດຕົວຢ່າງຕໍ່ໄປນີ້:
.ສໍາລັບຂ້າພະເຈົ້າໃນ 1 2 3
a+= ${i}
j= ${i}
b+= ${j}
.endfor
ທັງ ໝົດ:
@echo ${a}
@echo ${b}
ຈະພິມ:
+1 2 3
+3 3 3
ເນື່ອງຈາກວ່າໃນຂະນະທີ່ ${a} ມີ “1 2 3” ຫຼັງຈາກ loop ຖືກປະຕິບັດ, ${b} ມີ “${j}
${j} ${j}” ເຊິ່ງຂະຫຍາຍເປັນ “3 3 3” ນັບຕັ້ງແຕ່ຫຼັງຈາກ loop ສໍາເລັດ ${j} ມີ “3”.
ການປ່ຽນແປງ ຫ້ອງຮຽນ
ສີ່ຫ້ອງຮຽນທີ່ແຕກຕ່າງກັນຂອງຕົວແປ (ຕາມລໍາດັບທີ່ເພີ່ມຂຶ້ນ) ແມ່ນ:
ຕົວແປສະພາບແວດລ້ອມ
ຕົວແປທີ່ກໍານົດເປັນສ່ວນຫນຶ່ງຂອງ bmakeສະພາບແວດລ້ອມຂອງ.
ຕົວແປທົ່ວໂລກ
ຕົວແປທີ່ກໍານົດຢູ່ໃນ makefile ຫຼືໃນ makefiles ລວມ.
ຕົວແປແຖວຄໍາສັ່ງ
ຕົວແປທີ່ກໍານົດເປັນສ່ວນຫນຶ່ງຂອງເສັ້ນຄໍາສັ່ງ.
ຕົວແປທ້ອງຖິ່ນ
ຕົວແປທີ່ຖືກກໍານົດສະເພາະກັບເປົ້າຫມາຍທີ່ແນ່ນອນ.
ຕົວແປທ້ອງຖິ່ນທັງຫມົດແມ່ນສ້າງຂຶ້ນໃນແລະຄຸນຄ່າຂອງພວກມັນແຕກຕ່າງກັນຢ່າງມະຫັດສະຈັນຈາກເປົ້າຫມາຍໄປຫາເປົ້າຫມາຍ. ມັນ
ໃນປັດຈຸບັນບໍ່ສາມາດກໍານົດຕົວແປທ້ອງຖິ່ນໃຫມ່. ເຈັດຕົວແປທ້ອງຖິ່ນແມ່ນເປັນ
ຕໍ່ໄປນີ້:
.ALLSRC ບັນຊີລາຍຊື່ຂອງແຫຼ່ງທັງຫມົດສໍາລັບເປົ້າຫມາຍນີ້; ທີ່ຮູ້ຈັກຍັງເປັນ '>'.
.ຮວບຮວມ ຊື່ຂອງແຟ້ມຮວບຮວມ; ທີ່ຮູ້ຈັກຍັງເປັນ '!'.
.IMPSRC ໃນກົດລະບຽບການຫັນປ່ຽນ suffix, ຊື່ / ເສັ້ນທາງຂອງແຫຼ່ງທີ່ມາຈາກ
ເປົ້າໝາຍແມ່ນຈະຫັນປ່ຽນ (ແຫຼ່ງ “ບົ່ງບອກ”); ທີ່ຮູ້ຈັກຍັງເປັນ '<'. ມັນ
ບໍ່ໄດ້ຖືກກໍານົດໄວ້ໃນກົດລະບຽບທີ່ຊັດເຈນ.
.ສະມາຊິກ ຊື່ຂອງສະມາຊິກຮວບຮວມ; ທີ່ຮູ້ຈັກຍັງເປັນ '%'.
.OODATE ບັນຊີລາຍຊື່ຂອງແຫຼ່ງຂໍ້ມູນສໍາລັບເປົ້າຫມາຍນີ້ທີ່ຖືກຖືວ່າລ້າສະໄຫມ; ເປັນທີ່ຮູ້ຈັກ
ເປັນ '?'.
.PREFIX ຄໍານໍາຫນ້າໄຟລ໌ຂອງເປົ້າຫມາຍ, ປະກອບມີພຽງແຕ່ສ່ວນໄຟລ໌, ບໍ່ມີຄໍາຕໍ່ທ້າຍ
ຫຼືອົງປະກອບຂອງໄດເລກະທໍລີກ່ອນຫນ້າ; ທີ່ຮູ້ຈັກຍັງເປັນ '*'. ຄໍາຕໍ່ທ້າຍຕ້ອງເປັນ
ຫນຶ່ງໃນຄໍາຕໍ່ທ້າຍທີ່ຮູ້ຈັກປະກາດດ້ວຍ .SUFFIXES ຫຼືມັນຈະບໍ່ເປັນ
ຮັບຮູ້.
.ເປົ້າຫມາຍ ຊື່ຂອງເປົ້າຫມາຍ; ທີ່ຮູ້ຈັກຍັງເປັນ '@'.
ຮູບແບບສັ້ນກວ່າ ('>','!','<','%','?','*', ແລະ'@') ອະນຸຍາດໃຫ້ສໍາລັບການກັບຄືນໄປບ່ອນ
ຄວາມເຂົ້າກັນໄດ້ກັບ makefiles ປະຫວັດສາດແລະ legacy POSIX ເຮັດໃຫ້ແລະບໍ່ແນະນໍາ.
ຕົວແປຂອງຕົວແປເຫຼົ່ານີ້ທີ່ມີເຄື່ອງໝາຍວັກຕອນຕິດຕາມທັນທີດ້ວຍ 'D' ຫຼື 'F', ຕົວຢ່າງ:
'$(@D)', ແມ່ນຮູບແບບເກົ່າທີ່ທຽບເທົ່າກັບການໃຊ້ຕົວແກ້ໄຂ ':H' ແລະ ':T'. ຮູບແບບເຫຼົ່ານີ້ແມ່ນ
ຍອມຮັບສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບ AT&T System V UNIX makefiles ແລະ POSIX ແຕ່ບໍ່ແມ່ນ
ແນະນໍາໃຫ້.
ສີ່ຂອງຕົວແປທ້ອງຖິ່ນອາດຈະຖືກນໍາໃຊ້ໃນແຫຼ່ງຂໍ້ມູນກ່ຽວກັບສາຍການເພິ່ງພາອາໄສເພາະວ່າພວກມັນຂະຫຍາຍ
ກັບມູນຄ່າທີ່ເຫມາະສົມສໍາລັບແຕ່ລະເປົ້າຫມາຍໃນເສັ້ນ. ຕົວແປເຫຼົ່ານີ້ແມ່ນ '.ເປົ້າຫມາຍ','.PREFIX',
'.ຮວບຮວມ', ແລະ'.ສະມາຊິກ'.
ເພີ່ມເຕີມ ສ້າງຂຶ້ນໃນ ຕົວແປ
ເພີ່ມເຕີມ, bmake ກໍານົດຫຼືຮູ້ກ່ຽວກັບຕົວແປຕໍ່ໄປນີ້:
$ ສັນຍາລັກໂດລາດຽວ '$', ie '$$' ຂະຫຍາຍເປັນສັນຍາລັກໂດລາດຽວ.
.ເປົ້າໝາຍ ບັນຊີລາຍຊື່ຂອງເປົ້າຫມາຍທັງຫມົດທີ່ພົບໃນ Makefile. ຖ້າປະເມີນໃນລະຫວ່າງ
Makefile parsing, ລາຍຊື່ພຽງແຕ່ເປົ້າຫມາຍເຫຼົ່ານັ້ນທີ່ພົບມາເຖິງຕອນນັ້ນ.
.CURDI ເສັ້ນທາງໄປຫາໄດເລກະທໍລີທີ່ bmake ໄດ້ຖືກປະຕິບັດ. ອ້າງເຖິງຄໍາອະທິບາຍ
ຂອງ 'PWD' ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ.
.ຮວມທັງ
ໄດເລກະທໍລີຂອງໄຟລ໌ Makefile ນີ້ແມ່ນລວມມາຈາກ.
.ລວມເອົາໄຟລ໌
ຊື່ໄຟລ໌ຂອງໄຟລ໌ Makefile ນີ້ແມ່ນລວມມາຈາກ.
ເຮັດໃຫ້ຊື່ວ່າ bmake ຖືກປະຕິບັດດ້ວຍ (argv[0]). ສໍາລັບຄວາມເຂົ້າກັນໄດ້ bmake
ຍັງກໍານົດ .ເຮັດ ມີມູນຄ່າດຽວກັນ. ຕົວແປທີ່ຕ້ອງການໃຊ້ແມ່ນ
ຕົວແປສະພາບແວດລ້ອມ MAKE ເພາະວ່າມັນເຂົ້າກັນໄດ້ກັບລຸ້ນອື່ນໆ
of bmake ແລະບໍ່ສາມາດສັບສົນກັບເປົ້າຫມາຍພິເສດທີ່ມີຊື່ດຽວກັນ.
.MAKE.DEPENDFILE
ຕັ້ງຊື່ makefile (ຄ່າເລີ່ມຕົ້ນ '.ຂື້ນຢູ່') ຈາກທີ່ສ້າງຂື້ນຂຶ້ນກັບ
ອ່ານ
.MAKE.EXPAND_VARIABLES
ບູລີນທີ່ຄວບຄຸມພຶດຕິກໍາເລີ່ມຕົ້ນຂອງ -V ທາງເລືອກ.
.MAKE.ສົ່ງອອກ ບັນຊີລາຍຊື່ຂອງຕົວແປທີ່ສົ່ງອອກໂດຍ bmake.
.ເຮັດ.ວຽກ ການໂຕ້ຖຽງກັບ -j ທາງເລືອກ.
.MAKE.JOB.PREFIX
If bmake ແມ່ນດໍາເນີນການກັບ j ຫຼັງຈາກນັ້ນ, ຜົນຜະລິດສໍາລັບແຕ່ລະເປົ້າຫມາຍແມ່ນ prefixed ກັບ token
' --- ເປົ້າຫມາຍ --- ' ພາກສ່ວນທໍາອິດຂອງທີ່ສາມາດຄວບຄຸມໄດ້ໂດຍຜ່ານ
.MAKE.JOB.PREFIXທີ່ຢູ່ ຖ້າຫາກວ່າ .MAKE.JOB.PREFIX ຫວ່າງເປົ່າ, ບໍ່ມີການພິມໂທເຄັນ.
ຕົວຢ່າງ: .MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}] ຈະ
ຜະລິດ tokens ເຊັ່ນ '---make[1234] ເປົ້າຫມາຍ ---' ເຮັດໃຫ້ມັນງ່າຍຕໍ່ການຕິດຕາມ
ລະດັບຄວາມຂະໜານທີ່ບັນລຸໄດ້.
MAKEFLAGS ຕົວແປສະພາບແວດລ້ອມ 'MAKEFLAGS' ອາດຈະມີສິ່ງໃດແດ່ທີ່ອາດຈະເປັນ
ລະບຸໄວ້ bmakeເສັ້ນຄໍາສັ່ງຂອງ. ທຸກຢ່າງທີ່ລະບຸໄວ້ bmakeຄໍາສັ່ງຂອງ
ເສັ້ນຖືກຕໍ່ທ້າຍກັບຕົວແປ 'MAKEFLAGS' ເຊິ່ງຫຼັງຈາກນັ້ນເຂົ້າໄປໃນຕົວແປ
ສະພາບແວດລ້ອມສໍາລັບໂຄງການທັງຫມົດທີ່ bmake ປະຕິບັດ.
.MAKE.LEVEL ຄວາມເລິກ recursion ຂອງ bmake. ຕົວຢ່າງເບື້ອງຕົ້ນຂອງ bmake ຈະເປັນ 0, ແລະ
ມູນຄ່າທີ່ເພີ່ມຂຶ້ນແມ່ນເອົາໃສ່ໃນສະພາບແວດລ້ອມທີ່ຈະໄດ້ຮັບການເຫັນໂດຍຕໍ່ໄປ
ລຸ້ນ. ນີ້ອະນຸຍາດໃຫ້ທົດສອບເຊັ່ນ: .if ${.MAKE.LEVEL} == 0 ເພື່ອປົກປ້ອງ
ສິ່ງທີ່ຄວນປະເມີນພຽງແຕ່ຢູ່ໃນຕົວຢ່າງເບື້ອງຕົ້ນຂອງ bmake.
.MAKE.MAKEFILE_PREFERENCE
ບັນຊີລາຍຊື່ຄໍາສັ່ງຂອງຊື່ makefile (ຄ່າເລີ່ມຕົ້ນ 'makefile','makefile') ວ່າ
bmake ຈະຊອກຫາ.
.MAKE.MAKEFILES
ບັນຊີລາຍຊື່ຂອງ makefiles ອ່ານໂດຍ bmake, ເຊິ່ງເປັນປະໂຫຍດສໍາລັບການຕິດຕາມ
ການເພິ່ງພາອາໄສ. ແຕ່ລະ makefile ຖືກບັນທຶກພຽງແຕ່ຄັ້ງດຽວ, ໂດຍບໍ່ຄໍານຶງເຖິງຈໍານວນ
ຂອງເວລາອ່ານ.
.MAKE.MODE ປະມວນຜົນຫຼັງຈາກການອ່ານ makefiles ທັງຫມົດ. ສາມາດສົ່ງຜົນກະທົບຕໍ່ຮູບແບບທີ່ bmake ແລ່ນ
in. ມັນສາມາດປະກອບມີຄໍາສໍາຄັນຈໍານວນຫນຶ່ງ:
compat ຄື -B, puts bmake ເຂົ້າໄປໃນຮູບແບບ "compat".
meta ເຮັດໃຫ້ bmake ເຂົ້າໄປໃນຮູບແບບ "meta", ບ່ອນທີ່ໄຟລ໌ meta ຖືກສ້າງຂື້ນສໍາລັບ
ແຕ່ລະເປົ້າຫມາຍທີ່ຈະເກັບກໍາຄໍາສັ່ງດໍາເນີນການ, ຜົນຜະລິດທີ່ສ້າງຂຶ້ນແລະ
if ໝາກ ນາວ(4) ແມ່ນມີ, ການໂທລະບົບທີ່ມີຂອງ
ຄວາມສົນໃຈ bmake. ຜົນຜະລິດ captured ສາມາດເປັນປະໂຫຍດຫຼາຍໃນເວລາທີ່
ຄວາມຜິດພາດການວິນິດໄສ.
curdirOk= bf ປົກກະຕິແລ້ວ bmake ຈະບໍ່ສ້າງໄຟລ໌ .meta ໃນ '.CURDI'. ນີ້
ສາມາດ overridden ໂດຍການຕັ້ງຄ່າ bf ກັບຄ່າທີ່ເປັນຕົວແທນ
ຖືກຕ້ອງ.
ປະມານ ສໍາລັບການ debugging, ມັນສາມາດເປັນປະໂຫຍດທີ່ຈະ inlcude ສະພາບແວດລ້ອມໃນ
ໄຟລ໌ .meta.
ຄຳເວົ້າ ຖ້າຢູ່ໃນໂຫມດ "meta", ພິມຂໍ້ຄຶດກ່ຽວກັບເປົ້າຫມາຍທີ່ຖືກສ້າງຂຶ້ນ.
ນີ້ເປັນປະໂຫຍດຖ້າການກໍ່ສ້າງບໍ່ດັ່ງນັ້ນແລ່ນຢ່າງງຽບໆ. ໄດ້
ຂໍ້ຄວາມພິມມູນຄ່າຂອງ: .MAKE.META.PREFIX.
ignore-cmd ບາງ makefiles ມີຄໍາສັ່ງທີ່ພຽງແຕ່ບໍ່ຫມັ້ນຄົງ. ນີ້
ຄໍາສໍາຄັນເຮັດໃຫ້ພວກເຂົາຖືກລະເວັ້ນສໍາລັບການກໍານົດວ່າ a
ເປົ້າຫມາຍແມ່ນລ້າສະໄຫມໃນໂຫມດ "meta". ເບິ່ງນຳ .NOMETA_CMP.
ງຽບ= bf If bf ແມ່ນແທ້, ເມື່ອໄຟລ໌ .meta ຖືກສ້າງຂຶ້ນ, ໃຫ້ໝາຍເປົ້າໝາຍ
.ງຽບ.
.MAKE.META.BAILIWICK
ໃນໂຫມດ "meta", ໃຫ້ບັນຊີລາຍຊື່ຂອງຄໍານໍາຫນ້າທີ່ກົງກັບໄດເລກະທໍລີ
ຄວບຄຸມໂດຍ bmake. ຖ້າໄຟລ໌ທີ່ສ້າງຂຶ້ນຢູ່ນອກ .OBJDIR ແຕ່
ພາຍໃນກ່າວວ່າ bailiwick ຫາຍສາບສູນ, ເປົ້າ ໝາຍ ປະຈຸບັນຖືກພິຈາລະນາຢູ່ນອກ.
ວັນທີ.
.MAKE.META.CREATED
ໃນໂຫມດ "meta", ຕົວແປນີ້ມີບັນຊີລາຍຊື່ຂອງໄຟລ໌ meta ທັງຫມົດທີ່ຖືກປັບປຸງ.
ຖ້າບໍ່ຫວ່າງ, ມັນສາມາດຖືກນໍາໃຊ້ເພື່ອກະຕຸ້ນການປຸງແຕ່ງ .MAKE.META.FILES.
.MAKE.META.FILES
ໃນໂຫມດ "meta", ຕົວແປນີ້ມີບັນຊີລາຍຊື່ຂອງໄຟລ໌ meta ທັງຫມົດທີ່ໃຊ້
(ອັບເດດຫຼືບໍ່). ບັນຊີລາຍຊື່ນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອປະມວນຜົນໄຟລ໌ meta ກັບ
ສະກັດຂໍ້ມູນການເພິ່ງພາອາໄສ.
.MAKE.META.IGNORE_PATHS
ສະຫນອງບັນຊີລາຍຊື່ຂອງຄໍານໍາຫນ້າເສັ້ນທາງທີ່ຄວນຈະຖືກລະເວັ້ນ; ເນື່ອງຈາກວ່າ
ເນື້ອໃນຄາດວ່າຈະມີການປ່ຽນແປງໃນໄລຍະເວລາ. ບັນຊີລາຍຊື່ເລີ່ມຕົ້ນປະກອບມີ: '/ dev
/ ແລະອື່ນໆ / proc / tmp / var / run / var / tmp'
.MAKE.META.PREFIX
ກໍານົດຂໍ້ຄວາມທີ່ພິມອອກສໍາລັບແຕ່ລະໄຟລ໌ meta ປັບປຸງໃນ "meta verbose"
ໂໝດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ:
ການກໍ່ສ້າງ ${.TARGET:H:tA}/${.TARGET:T}
.ເຮັດໄດ້ ຕົວແປນີ້ຖືກໃຊ້ເພື່ອບັນທຶກຊື່ຂອງຕົວແປທີ່ຖືກມອບໝາຍໃຫ້ຢູ່ໃນ
ເສັ້ນຄໍາສັ່ງ, ດັ່ງນັ້ນພວກເຂົາອາດຈະຖືກສົ່ງອອກເປັນສ່ວນຫນຶ່ງຂອງ 'MAKEFLAGS'. ນີ້
ພຶດຕິກໍາສາມາດຖືກປິດໃຊ້ງານໄດ້ໂດຍການກໍານົດຄ່າຫວ່າງເປົ່າໃຫ້ກັບ '.ເຮັດໄດ້'
ພາຍໃນ makefile. ຕົວແປເພີ່ມເຕີມສາມາດຖືກສົ່ງອອກຈາກ makefile ໂດຍ
ຕື່ມຊື່ຂອງເຂົາເຈົ້າກັບ '.ເຮັດໄດ້'. 'MAKEFLAGS' ຖືກສົ່ງອອກຄືນ
ທຸກຄັ້ງ '.ເຮັດໄດ້' ຖືກແກ້ໄຂ.
.MAKE.PATH_FILEMON
If bmake ໄດ້ຖືກສ້າງຂຶ້ນດ້ວຍ ໝາກ ນາວ(4) ສະຫນັບສະຫນູນ, ນີ້ແມ່ນກໍານົດໄປສູ່ເສັ້ນທາງຂອງ
node ອຸປະກອນ. ນີ້ອະນຸຍາດໃຫ້ makefiles ທົດສອບສໍາລັບການສະຫນັບສະຫນູນນີ້.
.MAKE.PID process-id ຂອງ bmake.
.MAKE.PPID ໄອດີຂະບວນການຫຼັກຂອງ bmake.
.MAKE.SAVE_DOLLARS
ຄ່າຄວນຈະເປັນ boolen ທີ່ຄວບຄຸມ wether '$$' ຖືກຮັກສາໄວ້ໃນເວລາເຮັດ
':=' ການມອບໝາຍ. ຄ່າເລີ່ມຕົ້ນແມ່ນບໍ່ຖືກຕ້ອງ, ສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບຫຼັງ. ຕັ້ງ
ເປັນຄວາມຈິງສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບຜູ້ຜະລິດອື່ນໆ. ຖ້າຕັ້ງເປັນຜິດ, '$$' ຈະກາຍເປັນ
'$' ຕໍ່ກົດລະບຽບການປະເມີນຜົນປົກກະຕິ.
MAKE_PRINT_VAR_ON_ERROR
ເມື່ອໃດ bmake ຢຸດເຊົາເນື່ອງຈາກຄວາມຜິດພາດ, ມັນພິມຊື່ແລະມູນຄ່າຂອງ
'.CURDI'ເຊັ່ນດຽວກັນກັບຄ່າຂອງຕົວແປໃດໆທີ່ມີຊື່ໃນ
'MAKE_PRINT_VAR_ON_ERROR'.
.ແຖວໃໝ່ ຕົວແປນີ້ພຽງແຕ່ຖືກມອບໝາຍຕົວອັກສອນແຖວໃໝ່ເປັນຄ່າຂອງມັນ. ນີ້
ອະນຸຍາດໃຫ້ຂະຫຍາຍການນໍາໃຊ້ :@ ຕົວແກ້ໄຂເພື່ອວາງແຖວໃໝ່ລະຫວ່າງການຊໍ້າຄືນ
ຂອງ loop ແທນທີ່ຈະເປັນຊ່ອງ. ສໍາລັບຕົວຢ່າງ, ການພິມ
'MAKE_PRINT_VAR_ON_ERROR' ສາມາດເຮັດໄດ້ເປັນ
${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}.
.OBJDIR ເສັ້ນທາງໄປຫາໄດເລກະທໍລີທີ່ເປົ້າຫມາຍຖືກສ້າງຂຶ້ນ. ມູນຄ່າຂອງມັນແມ່ນ
ກໍານົດໂດຍການພະຍາຍາມ chdir(2) ໄປຫາໄດເລກະທໍລີຕໍ່ໄປນີ້ຕາມລໍາດັບແລະ
ການນໍາໃຊ້ການແຂ່ງຂັນຄັ້ງທໍາອິດ:
1. ${MAKEOBJDIRPREFIX}${.CURDIR}
(ພຽງແຕ່ຖ້າ 'MAKEOBJDIRPREFIX' ຖືກຕັ້ງຢູ່ໃນສະພາບແວດລ້ອມຫຼືໃນຄໍາສັ່ງ
ສາຍ.)
2. ${MAKEOBJDIR}
(ພຽງແຕ່ຖ້າ 'MAKEOBJDIR' ຖືກຕັ້ງຢູ່ໃນສະພາບແວດລ້ອມຫຼືໃນຄໍາສັ່ງ
ສາຍ.)
3. ${.CURDIR}/obj.${MACHINE}
4. ${.CURDIR}/obj
5. /usr/obj/${.CURDIR}
6. ${.CURDIR}
ການຂະຫຍາຍຕົວແປແມ່ນປະຕິບັດກ່ຽວກັບຄ່າກ່ອນທີ່ຈະຖືກນໍາໃຊ້, ດັ່ງນັ້ນ
ການສະແດງອອກເຊັ່ນ
${.CURDI:S,^/ usr / src,/var/obj,}
ອາດຈະຖືກນໍາໃຊ້. ນີ້ແມ່ນເປັນປະໂຫຍດໂດຍສະເພາະກັບ 'MAKEOBJDIR'.
'.OBJDIR'ອາດຈະຖືກດັດແກ້ໃນ makefile ຜ່ານເປົ້າຫມາຍພິເສດ '.OBJDIR'.
ໃນທຸກກໍລະນີ, bmake ຈະ chdir(2) ໄປຫາໄດເລກະທໍລີທີ່ລະບຸໄວ້ຖ້າມັນມີຢູ່,
ແລະຕັ້ງ '.OBJDIR' ແລະ 'PWD' ໄປຫາໄດເລກະທໍລີນັ້ນກ່ອນທີ່ຈະປະຕິບັດເປົ້າຫມາຍໃດໆ.
.PARSEDIR ເສັ້ນທາງໄປຫາໄດເລກະທໍລີຂອງປະຈຸບັນ 'makefile' ກໍາລັງວິເຄາະ.
.PARSEFILE ຊື່ພື້ນຖານຂອງປະຈຸບັນ 'makefile' ກໍາລັງວິເຄາະ. ຕົວແປນີ້ແລະ
'.PARSEDIR' ທັງສອງຖືກຕັ້ງພຽງແຕ່ໃນຂະນະທີ່ 'Makefiles'ກຳລັງຖືກວິເຄາະ. ຖ້າ
ທ່ານຕ້ອງການທີ່ຈະຮັກສາຄຸນຄ່າໃນປະຈຸບັນຂອງເຂົາເຈົ້າ, ມອບຫມາຍໃຫ້ເຂົາເຈົ້າກັບຕົວປ່ຽນແປງໂດຍນໍາໃຊ້
ການມອບຫມາຍດ້ວຍການຂະຫຍາຍ: (':=').
.PATH ຕົວແປທີ່ເປັນຕົວແທນຂອງລາຍຊື່ໄດເລກະທໍລີທີ່ bmake ຈະຄົ້ນຫາ
ສໍາລັບໄຟລ໌. ບັນຊີລາຍຊື່ຄົ້ນຫາຄວນໄດ້ຮັບການປັບປຸງໂດຍໃຊ້ເປົ້າຫມາຍ '.PATH'
ແທນທີ່ຈະເປັນຕົວແປ.
PWD ເສັ້ນທາງສຳຮອງໄປຫາໄດເລກະທໍລີປະຈຸບັນ. bmake ປົກກະຕິແລ້ວ '.CURDI' ເຖິງ
ເສັ້ນທາງ canonical ໃຫ້ໂດຍ getcwd(3). ຢ່າງໃດກໍຕາມ, ຖ້າສະພາບແວດລ້ອມປ່ຽນແປງ
'PWD' ຖືກຕັ້ງແລະໃຫ້ເສັ້ນທາງໄປຫາໄດເລກະທໍລີປະຈຸບັນ, ຫຼັງຈາກນັ້ນ bmake ຊຸດ
'.CURDI' ກັບຄ່າຂອງ 'PWD' ແທນ. ພຶດຕິກໍານີ້ຖືກປິດໃຊ້ງານຖ້າ
'MAKEOBJDIRPREFIX' ຖືກຕັ້ງໄວ້ ຫຼື 'MAKEOBJDIR' ມີຕົວແປທີ່ປ່ຽນແປງໄດ້.
'PWD' ຖືກຕັ້ງເປັນຄ່າຂອງ '.OBJDIRສໍາລັບໂຄງການທັງຫມົດທີ່ bmake
ປະຕິບັດ.
.TARGETS ລາຍຊື່ເປົ້າໝາຍທີ່ລະບຸໄວ້ຢ່າງຈະແຈ້ງໃນແຖວຄຳສັ່ງ, ຖ້າມີ.
VPATH Colon-separated (“:”) ລາຍຊື່ໄດເລກະທໍລີທີ່ bmake ຈະຊອກຫາໄຟລ໌.
ຕົວແປແມ່ນສະຫນັບສະຫນູນສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບໂຄງການເຮັດເກົ່າເທົ່ານັ້ນ, ການນໍາໃຊ້
'.PATH'ແທນ.
ການປ່ຽນແປງ ຕົວປ່ຽນແປງ
ການຂະຫຍາຍຕົວແປອາດຈະຖືກດັດແປງເພື່ອເລືອກຫຼືດັດແປງແຕ່ລະຄໍາຂອງຕົວແປ (ບ່ອນທີ່ a
“ຄຳ” ແມ່ນລຳດັບຕົວອັກສອນທີ່ຂັ້ນດ້ວຍຊ່ອງຫວ່າງ). ຮູບແບບທົ່ວໄປຂອງຕົວແປ
ການຂະຫຍາຍຕົວແມ່ນດັ່ງຕໍ່ໄປນີ້:
${variable[:modifier[:...]]}
ແຕ່ລະຕົວແກ້ໄຂເລີ່ມຕົ້ນດ້ວຍຈໍ້າສອງເມັດ, ເຊິ່ງອາດຈະຖືກຫລົບຫນີດ້ວຍ backslash ('\').
ຊຸດຕົວປັບປ່ຽນສາມາດລະບຸໄດ້ຜ່ານຕົວແປ, ດັ່ງນີ້:
modifier_variable=ຕົວປ່ຽນ[:...]
${variable:${modifier_variable}[:...]}
ໃນກໍລະນີນີ້ຕົວປ່ຽນແປງທໍາອິດໃນ modifier_variable ບໍ່ໄດ້ເລີ່ມຕົ້ນດ້ວຍຈໍ້າສອງເມັດ, ນັບຕັ້ງແຕ່
ທີ່ຈະຕ້ອງປາກົດຢູ່ໃນຕົວແປການອ້າງອີງ. ຖ້າຕົວແກ້ໄຂໃດໆໃນ
modifier_variable ມີເຄື່ອງໝາຍເງິນໂດລາ ('$'), ສິ່ງເຫຼົ່ານີ້ຕ້ອງຖືກເພີ່ມເປັນສອງເທົ່າເພື່ອຫຼີກລ່ຽງໄວ
ການຂະຫຍາຍຕົວ.
ຕົວແກ້ໄຂທີ່ຮອງຮັບແມ່ນ:
:E ປ່ຽນແທນແຕ່ລະຄຳໃນຕົວແປດ້ວຍຄຳຕໍ່ທ້າຍຂອງມັນ.
:H ແທນທີ່ແຕ່ລະຄໍາໃນຕົວແປດ້ວຍທຸກສິ່ງທຸກຢ່າງແຕ່ອົງປະກອບສຸດທ້າຍ.
:Mຮູບແບບ
ເລືອກພຽງແຕ່ຄໍາທີ່ກົງກັນ ຮູບແບບ. ຕົວອັກສອນຕົວຫຍໍ້ຂອງ shell ມາດຕະຖານ
('*', '?', ແລະ '[]') ອາດຈະຖືກນໍາໃຊ້. ຕົວອັກສອນແທນທີ່ອາດຈະຖືກຫລົບຫນີດ້ວຍ a
backslash ('\'). ເປັນຜົນມາຈາກວິທີທີ່ຄ່າຖືກແບ່ງອອກເປັນຄໍາສັບ, ຈັບຄູ່, ແລະ
ຫຼັງ ຈາກ ນັ້ນ ເຂົ້າ ຮ່ວມ, ການ ກໍ່ ສ້າງ ເຊັ່ນ :
${VAR:M*}
ຈະ normalize ໄລຍະຫ່າງລະຫວ່າງຄໍາ, ລົບຊ່ອງນໍາຫນ້າແລະ trailing ທັງຫມົດ, ແລະ
ການປ່ຽນພື້ນທີ່ຫຼາຍອັນຕິດຕໍ່ກັນເປັນຊ່ອງດຽວ.
:Nຮູບແບບ
ນີ້ແມ່ນຄ້າຍຄືກັນກັບ ':M', ແຕ່ເລືອກທຸກຄໍາທີ່ບໍ່ກົງກັນ ຮູບແບບ.
:O ສັ່ງໃຫ້ທຸກຄຳສັບເປັນຕົວແປ. ເພື່ອຈັດຮຽງຄໍາໃນຄໍາສັ່ງປີ້ນກັບກັນ, ການນໍາໃຊ້
':O:[-1..1]' ການປະສົມຂອງຕົວປັບປຸງແກ້ໄຂ.
:ອ໋ອກ Randomize ຄໍາໃນຕົວແປ. ຜົນໄດ້ຮັບຈະແຕກຕ່າງກັນໃນແຕ່ລະຄັ້ງທີ່ທ່ານກໍາລັງອ້າງອີງ
ກັບຕົວແປດັດແກ້; ໃຊ້ການມອບໝາຍດ້ວຍການຂະຫຍາຍ (':=') ເພື່ອປ້ອງກັນດັ່ງກ່າວ
ພຶດຕິກໍາ. ຍົກຕົວຢ່າງ,
LIST= uno due tre quattro
RANDOM_LIST= ${LIST:Ox}
STATIC_RANDOM_LIST:= ${LIST:Ox}
ທັງ ໝົດ:
@echo "${RANDOM_LIST}"
@echo "${RANDOM_LIST}"
@echo "${STATIC_RANDOM_LIST}"
@echo "${STATIC_RANDOM_LIST}"
ອາດຈະໃຫ້ຜະລິດຕະພັນທີ່ຄ້າຍຄືກັນກັບ:
quattro due tre uno
tre due quattro uno
ເນື່ອງຈາກ uno quattro tre
ເນື່ອງຈາກ uno quattro tre
:Q ວົງຢືມທຸກຕົວແປ meta-carc ຢູ່ໃນຕົວແປ, ເພື່ອໃຫ້ມັນສາມາດຜ່ານໄດ້ຢ່າງປອດໄພ
ໂດຍຜ່ານ invocations recursive ຂອງ bmake.
:R ແທນທີ່ແຕ່ລະຄໍາທີ່ຢູ່ໃນຕົວແປດ້ວຍທຸກສິ່ງທຸກຢ່າງແຕ່ຄໍາຕໍ່ທ້າຍຂອງມັນ.
:gmtime
ຄ່າແມ່ນສະຕຣິງຮູບແບບສໍາລັບ ເວລາຕໍ່ເວລາ(3), ການນໍາໃຊ້ໃນປະຈຸບັນ gmtime(3).
: hash
ຄິດໄລ່ຄ່າ hash 32bit ແລະເຂົ້າລະຫັດເປັນ hex digits.
:ເວລາທ້ອງຖິ່ນ
ຄ່າແມ່ນສະຕຣິງຮູບແບບສໍາລັບ ເວລາຕໍ່ເວລາ(3), ການນໍາໃຊ້ໃນປະຈຸບັນ ທ້ອງຖິ່ນ(3).
:tA ພະຍາຍາມປ່ຽນຕົວແປເປັນເສັ້ນທາງຢ່າງແທ້ຈິງໂດຍໃຊ້ ເສັ້ນທາງທີ່ແທ້ຈິງ(3), ຖ້າວ່າມັນລົ້ມເຫລວ, the
ຄ່າບໍ່ປ່ຽນແປງ.
:tl ປ່ຽນຕົວແປເປັນຕົວພິມນ້ອຍ.
:tsc
ຄໍາສັບຕ່າງໆໃນຕົວແປແມ່ນປົກກະຕິແຍກອອກໂດຍຊ່ອງຫວ່າງກ່ຽວກັບການຂະຫຍາຍ. ຕົວແກ້ໄຂນີ້
ກໍານົດຕົວແຍກເປັນລັກສະນະ cທີ່ຢູ່ ຖ້າຫາກວ່າ c ຖືກລະເວັ້ນ, ຫຼັງຈາກນັ້ນບໍ່ມີຕົວແຍກຖືກນໍາໃຊ້.
ການຫລົບຫນີທົ່ວໄປ (ລວມທັງລະຫັດຕົວເລກ octal), ເຮັດວຽກຕາມທີ່ຄາດໄວ້.
:tu ປ່ຽນຕົວແປເປັນຕົວພິມໃຫຍ່.
:tW ເຮັດໃຫ້ຄ່າຖືກປະຕິບັດເປັນຄໍາດຽວ (ອາດຈະປະກອບດ້ວຍສີຂາວຝັງ
ຊ່ອງ). ເບິ່ງນຳ ':[*]'.
: tw ເຮັດໃຫ້ຄ່າທີ່ຈະຖືກປະຕິບັດເປັນລໍາດັບຂອງຄໍາທີ່ຖືກຈໍາກັດໂດຍພື້ນທີ່ສີຂາວ. ເບິ່ງ
ຍັງ ':[@]'.
:S/old_string/new_string/[1gW]
ປັບປຸງແກ້ໄຂການປະກົດຕົວຄັ້ງທໍາອິດຂອງ old_string ໃນມູນຄ່າຂອງຕົວແປ, ແທນທີ່ມັນດ້ວຍ
new_string. ຖ້າ 'g' ຖືກຕໍ່ທ້າຍກັບເຄື່ອງໝາຍສຸດທ້າຍຂອງຮູບແບບ, ທັງໝົດຈະເກີດຂຶ້ນໃນ
ແຕ່ລະຄໍາຖືກແທນທີ່. ຖ້າ '1' ຖືກຕໍ່ທ້າຍກັບຕົວຫຍໍ້ສຸດທ້າຍຂອງຮູບແບບ, ເທົ່ານັ້ນ
ຄໍາທໍາອິດໄດ້ຮັບຜົນກະທົບ. ຖ້າ 'W' ຖືກຕໍ່ທ້າຍກັບຕົວຫຍໍ້ສຸດທ້າຍຂອງຮູບແບບ,
ຫຼັງຈາກນັ້ນ, ມູນຄ່າຖືກປະຕິບັດເປັນຄໍາດຽວ (ອາດຈະປະກອບດ້ວຍພື້ນທີ່ສີຂາວຝັງຢູ່).
If old_string ເລີ່ມຕົ້ນດ້ວຍ cart ('^'), old_string ແມ່ນ anchored ໃນຕອນຕົ້ນຂອງ
ແຕ່ລະຄໍາ. ຖ້າ old_string ສິ້ນສຸດດ້ວຍເຄື່ອງຫມາຍເງິນໂດລາ ('$'), ມັນຖືກຍຶດຢູ່ໃນຕອນທ້າຍຂອງ
ແຕ່ລະຄໍາ. ພາຍໃນ new_string, ampersand ('&') ຖືກແທນທີ່ດ້ວຍ old_string (ໂດຍບໍ່ມີການ
'^' ຫຼື '$'). ຕົວອັກສອນໃດນຶ່ງອາດຈະຖືກໃຊ້ເປັນຕົວຂັ້ນສໍາລັບພາກສ່ວນຂອງ
ສະຕຣິງຕົວແກ້ໄຂ. ຕົວອັກສອນສະມໍ, ampersand ແລະ delimiter ອາດຈະຖືກຫລົບຫນີດ້ວຍ
backslash ('\').
ການຂະຫຍາຍຕົວແປເກີດຂື້ນໃນແບບປົກກະຕິພາຍໃນທັງສອງ old_string ແລະ new_string
ມີຂໍ້ຍົກເວັ້ນດຽວທີ່ backslash ຖືກນໍາໃຊ້ເພື່ອປ້ອງກັນການຂະຫຍາຍຕົວຂອງເງິນໂດລາ
ເຊັນ ('$'), ບໍ່ແມ່ນເຄື່ອງໝາຍເງິນໂດລາກ່ອນໜ້າຕາມປົກກະຕິ.
:C/ຮູບແບບ/ການທົດແທນ/[1gW]
ໄດ້ :C ຕົວແກ້ໄຂແມ່ນຄືກັນກັບ :S modifier ຍົກເວັ້ນວ່າສາຍເກົ່າແລະໃຫມ່,
ແທນທີ່ຈະເປັນສາຍທີ່ງ່າຍດາຍ, ເປັນການສະແດງອອກປົກກະຕິຂະຫຍາຍ (ເບິ່ງ regex(3))
string ຮູບແບບ ແລະຫນຶ່ງ ed(1) ແບບສະຕຣິງ ການທົດແທນ. ປົກກະຕິແລ້ວ, ປະກົດການທໍາອິດ
ຂອງຮູບແບບການ ຮູບແບບ ໃນແຕ່ລະຄໍາຂອງມູນຄ່າແມ່ນຖືກແທນທີ່ດ້ວຍ ການທົດແທນ. ໄດ້
ຕົວແກ້ໄຂ '1' ເຮັດໃຫ້ການປ່ຽນແທນທີ່ນຳໃຊ້ກັບຫຼາຍສຸດໜຶ່ງຄຳ; ຕົວແກ້ໄຂ 'g'
ເຮັດໃຫ້ການທົດແທນທີ່ນໍາໃຊ້ກັບຫຼາຍຕົວຢ່າງຂອງຮູບແບບການຄົ້ນຫາ ຮູບແບບ as
ເກີດຂື້ນໃນຄໍາສັບຫຼືຄໍາສັບທີ່ມັນຖືກພົບເຫັນຢູ່ໃນ; ຕົວແກ້ໄຂ 'W' ເຮັດໃຫ້ຄ່າເປັນ
ຖືກປະຕິບັດເປັນຄໍາດຽວ (ອາດມີພື້ນທີ່ສີຂາວຝັງຢູ່). ໃຫ້ສັງເກດວ່າ '1' ແລະ
'g' ແມ່ນ orthogonal; ອະດີດກໍານົດວ່າຫຼາຍຄໍາແມ່ນມີທ່າແຮງ
ຜົນກະທົບ, ສຸດທ້າຍບໍ່ວ່າຈະເປັນການທົດແທນຫຼາຍສາມາດເກີດຂຶ້ນພາຍໃນແຕ່ລະຄົນ
ຄໍາທີ່ໄດ້ຮັບຜົນກະທົບ.
ໃນຖານະເປັນສໍາລັບການ :S ຕົວແກ້ໄຂ, ໄດ້ ຮູບແບບ ແລະ ການທົດແທນ ແມ່ນຂຶ້ນກັບການຂະຫຍາຍຕົວແປ
ກ່ອນທີ່ຈະຖືກວິເຄາະເປັນສໍານວນປົກກະຕິ.
:T ແທນທີ່ແຕ່ລະຄໍາໃນຕົວແປດ້ວຍອົງປະກອບສຸດທ້າຍຂອງມັນ.
:u ເອົາຄໍາທີ່ຊໍ້າກັນທີ່ຢູ່ຕິດກັນອອກ (ເຊັ່ນ: ເປັນເອກະລັກ(1)).
:?true_string:false_string
ຖ້າຊື່ຕົວແປ (ບໍ່ແມ່ນຄ່າຂອງມັນ), ເມື່ອແຍກວິເຄາະເປັນ .if ການສະແດງອອກຕາມເງື່ອນໄຂ,
ປະເມີນເປັນ true, ກັບຄືນເປັນມູນຄ່າຂອງມັນ true_string, ຖ້າບໍ່ດັ່ງນັ້ນກັບຄືນ
false_string. ເນື່ອງຈາກຊື່ຕົວແປແມ່ນໃຊ້ເປັນຕົວສະແດງ, :? ຕ້ອງເປັນຄັ້ງທໍາອິດ
modifier ຫຼັງຈາກຊື່ຕົວແປຕົວຂອງມັນເອງ - ເຊິ່ງ, ແນ່ນອນ, ປົກກະຕິແລ້ວຈະມີ
ການຂະຫຍາຍຕົວປ່ຽນແປງ. ຂໍ້ຜິດພາດທົ່ວໄປແມ່ນພະຍາຍາມໃຊ້ການສະແດງອອກເຊັ່ນ
${NUMBERS:M42:?match:no}
ເຊິ່ງໃນຕົວຈິງແມ່ນການທົດສອບທີ່ກໍານົດ (NUMBERS), ເພື່ອກໍານົດວ່າຄໍາໃດທີ່ກົງກັບ "42" ທ່ານຕ້ອງການ
ໃຊ້ບາງສິ່ງບາງຢ່າງເຊັ່ນ:
${"${NUMBERS:M42}" != "":?match:no}.
:old_string=new_string
ນີ້ແມ່ນຕົວປ່ຽນແບບຂອງ AT&T System V UNIX. ມັນຕ້ອງເປັນອັນສຸດທ້າຍ
ຕົວແກ້ໄຂທີ່ລະບຸໄວ້. ຖ້າ old_string or new_string ບໍ່ມີຮູບແບບທີ່ກົງກັນ
ລັກສະນະ % ຫຼັງຈາກນັ້ນ, ມັນແມ່ນສົມມຸດວ່າພວກມັນຖືກຍຶດໄວ້ໃນຕອນທ້າຍຂອງແຕ່ລະຄໍາ, ດັ່ງນັ້ນເທົ່ານັ້ນ
ຄຳຕໍ່ທ້າຍ ຫຼືຄຳສັບທັງໝົດອາດຈະຖືກແທນທີ່. ຖ້າບໍ່ດັ່ງນັ້ນ % ແມ່ນສາຍຍ່ອຍຂອງ old_string
ຈະຖືກທົດແທນໃນ new_string.
ການຂະຫຍາຍຕົວແປເກີດຂື້ນໃນແບບປົກກະຕິພາຍໃນທັງສອງ old_string ແລະ new_string
ມີຂໍ້ຍົກເວັ້ນດຽວທີ່ backslash ຖືກນໍາໃຊ້ເພື່ອປ້ອງກັນການຂະຫຍາຍຕົວຂອງເງິນໂດລາ
ເຊັນ ('$'), ບໍ່ແມ່ນເຄື່ອງໝາຍເງິນໂດລາກ່ອນໜ້າຕາມປົກກະຕິ.
:@ວັດລົມ@string@
ນີ້ແມ່ນກົນໄກການຂະຫຍາຍ loop ຈາກສະພາບແວດລ້ອມການພັດທະນາ OSF (ODE) ເຮັດໃຫ້.
ບໍ່ມັກ .ສໍາລັບ ການຂະຫຍາຍ loops ເກີດຂຶ້ນໃນເວລາທີ່ອ້າງອີງ. ມອບໝາຍ ວັດລົມ ກັບແຕ່ລະຄໍາ
ໃນຕົວແປແລະປະເມີນ string. ສົນທິສັນຍາ ODE ແມ່ນວ່າ ວັດລົມ ຄວນເລີ່ມຕົ້ນແລະ
ສິ້ນສຸດດ້ວຍໄລຍະເວລາ. ຍົກຕົວຢ່າງ.
${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@}
ແນວໃດກໍ່ຕາມຕົວແປຕົວແປຕົວດຽວມັກຈະອ່ານໄດ້ຫຼາຍກວ່າ:
${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}
:Uໃຫມ່
ຖ້າຕົວແປແມ່ນບໍ່ໄດ້ກໍານົດ ໃຫມ່ ແມ່ນມູນຄ່າ. ຖ້າຕົວແປຖືກກໍານົດ, the
ມູນຄ່າທີ່ມີຢູ່ແລ້ວຖືກສົ່ງຄືນ. ນີ້ແມ່ນຄຸນສົມບັດເຮັດໃຫ້ ODE ອື່ນ. ມັນເປັນປະໂຫຍດສໍາລັບການຕັ້ງ
CFLAGS ຕໍ່ເປົ້າໝາຍເຊັ່ນ:
${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}}
ຖ້າຄ່າຕ້ອງການພຽງແຕ່ຖ້າຕົວແປບໍ່ໄດ້ຖືກ ກຳ ນົດ, ໃຫ້ໃຊ້:
${VAR:D:Unnewval}
:Dໃຫມ່
ຖ້າຕົວແປຖືກກໍານົດ ໃຫມ່ ແມ່ນມູນຄ່າ.
:L ຊື່ຂອງຕົວແປແມ່ນຄ່າ.
:P ເສັ້ນທາງຂອງ node ທີ່ມີຊື່ດຽວກັນກັບຕົວແປແມ່ນຄ່າ. ຖ້າບໍ່ມີ
node ມີຢູ່ຫຼືເສັ້ນທາງຂອງມັນແມ່ນ null, ຫຼັງຈາກນັ້ນຊື່ຂອງຕົວແປຖືກນໍາໃຊ້. ໃນຄໍາສັ່ງສໍາລັບການ
ຕົວແກ້ໄຂນີ້ເພື່ອເຮັດວຽກ, ຊື່ (node) ຢ່າງຫນ້ອຍຈະຕ້ອງປາກົດຢູ່ໃນ rhs ຂອງ a
ການເພິ່ງພາອາໄສ.
:!cmd!
ຜົນຜະລິດຂອງການແລ່ນ cmd ແມ່ນມູນຄ່າ.
:sh ຖ້າຕົວແປບໍ່ຫວ່າງ, ມັນຈະຖືກເອີ້ນໃຊ້ເປັນຄໍາສັ່ງແລະຜົນໄດ້ຮັບຈະກາຍເປັນອັນໃຫມ່
ມູນຄ່າ.
::=str
ຕົວແປແມ່ນໄດ້ມອບຫມາຍຄ່າ str ຫຼັງຈາກການທົດແທນ. ຕົວແກ້ໄຂນີ້ແລະຂອງມັນ
ການປ່ຽນແປງແມ່ນເປັນປະໂຫຍດໃນສະຖານະການທີ່ບໍ່ຊັດເຈນເຊັ່ນ: ຕ້ອງການກໍານົດຕົວແປໃນເວລາທີ່
ຄຳສັ່ງ shell ກຳລັງຖືກວິເຄາະ. ຕົວແກ້ໄຂການມອບໝາຍເຫຼົ່ານີ້ສະເຫມີຂະຫຍາຍອອກໄປບໍ່ມີຫຍັງເລີຍ,
ສະນັ້ນຖ້າປະກົດຕົວຢູ່ໃນເສັ້ນກົດລະບຽບດ້ວຍຕົນເອງຄວນຖືກນໍາຫນ້າດ້ວຍບາງສິ່ງບາງຢ່າງທີ່ຈະຮັກສາ
bmake happy
The '::' ຊ່ວຍຫຼີກເວັ້ນການກົງກັນທີ່ບໍ່ຖືກຕ້ອງກັບຮູບແບບ AT&T System V UNIX := ດັດແກ້ແລະ
ນັບຕັ້ງແຕ່ການທົດແທນເກີດຂຶ້ນສະເຫມີ ::= ຮູບແບບແມ່ນບໍ່ເຫມາະສົມຢ່າງບໍ່ແນ່ນອນ.
::?=str
ເປັນສໍາລັບ ::= ແຕ່ພຽງແຕ່ຖ້າຕົວແປບໍ່ມີຄ່າແລ້ວ.
::+=str
ເອກະສານຊ້ອນທ້າຍ str ກັບຕົວແປ.
::!=cmd
ກໍານົດຜົນຜະລິດຂອງ cmd ກັບຕົວແປ.
:[ລະດັບ]
ເລືອກຫນຶ່ງຫຼືຫຼາຍຄໍາຈາກມູນຄ່າ, ຫຼືດໍາເນີນການອື່ນໆທີ່ກ່ຽວຂ້ອງກັບການ
ວິທີການທີ່ມູນຄ່າຖືກແບ່ງອອກເປັນຄໍາສັບ.
ໂດຍປົກກະຕິ, ມູນຄ່າຖືກປະຕິບັດເປັນລໍາດັບຂອງຄໍາທີ່ຖືກຈໍາກັດໂດຍພື້ນທີ່ສີຂາວ. ບາງ
ຕົວແກ້ໄຂສະກັດກັ້ນພຶດຕິກໍານີ້, ເຊິ່ງກໍ່ໃຫ້ເກີດຄ່າທີ່ຈະຖືກປະຕິບັດເປັນຄໍາດຽວ
(ອາດມີພື້ນທີ່ສີຂາວຝັງຢູ່). ຄ່າຫວ່າງເປົ່າ, ຫຼືຄ່າທີ່ປະກອບດ້ວຍ
ພື້ນທີ່ສີຂາວທັງຫມົດ, ຖືກປະຕິບັດເປັນຄໍາດຽວ. ສໍາລັບຈຸດປະສົງຂອງ ':[]'
ຕົວແກ້ໄຂ, ຄໍາສັບຕ່າງໆໄດ້ຖືກດັດສະນີທັງສອງດ້ານໂດຍນໍາໃຊ້ຈໍານວນບວກ (ບ່ອນທີ່ດັດສະນີ 1
ເປັນຕົວແທນຂອງຄໍາທໍາອິດ), ແລະກັບຄືນໄປບ່ອນໂດຍໃຊ້ຈໍານວນລົບ (ບ່ອນທີ່ດັດຊະນີ -1
ເປັນຕົວແທນຂອງຄໍາສຸດທ້າຍ).
ໄດ້ ລະດັບ ແມ່ນຂຶ້ນກັບການຂະຫຍາຍຕົວແປ, ແລະຜົນໄດ້ຮັບຂະຫຍາຍແມ່ນຫຼັງຈາກນັ້ນ
ຕີຄວາມໝາຍດັ່ງນີ້:
ດັດຊະນີ ເລືອກຄໍາດຽວຈາກຄ່າ.
ການເລີ່ມຕົ້ນ..ໃນຕອນທ້າຍ
ເລືອກທຸກຄຳສັບຈາກ ການເລີ່ມຕົ້ນ to ໃນຕອນທ້າຍ, ລວມ. ຍົກຕົວຢ່າງ, ':[2..-1]' ເລືອກ
ທຸກຄໍາຈາກຄໍາທີສອງໄປຫາຄໍາສຸດທ້າຍ. ຖ້າ ການເລີ່ມຕົ້ນ ແມ່ນຫຼາຍກ່ວາ ໃນຕອນທ້າຍ,
ຫຼັງຈາກນັ້ນ, ຄໍາສັບຕ່າງໆແມ່ນຜົນຜະລິດໃນລໍາດັບປີ້ນກັບກັນ. ຍົກຕົວຢ່າງ, ':[-1..1]' ເລືອກທັງຫມົດ
ຄໍາສັບຕ່າງໆຈາກສຸດທ້າຍໄປຫາທໍາອິດ.
* ເຮັດໃຫ້ຕົວແກ້ໄຂຕໍ່ມາປະຕິບັດຄ່າເປັນຄໍາດຽວ (ອາດຈະເປັນ
ປະກອບດ້ວຍພື້ນທີ່ສີຂາວຝັງ). ປຽບທຽບກັບຜົນກະທົບຂອງ "$*" ໃນ Bourne
ຫອຍ.
0 ຫມາຍຄວາມວ່າຄືກັນກັບ ':[*]'.
@ ເຮັດໃຫ້ຕົວແກ້ໄຂຕໍ່ມາປະຕິບັດຕໍ່ມູນຄ່າເປັນລໍາດັບຂອງຄໍາທີ່ຖືກຈໍາກັດ
ໂດຍພື້ນທີ່ສີຂາວ. ປຽບທຽບກັບຜົນກະທົບຂອງ "$@" ໃນ Bourne shell.
# ຕອບຈໍານວນຄໍາທີ່ຢູ່ໃນມູນຄ່າ.
INCLUDE ຖະແຫຼງການ, ເງື່ອນໄຂ ແລະ FOR ໂລບ
ການລວມເອົາ Makefile, ໂຄງສ້າງທີ່ມີເງື່ອນໄຂແລະສໍາລັບ loops reminiscent ຂອງການຂຽນໂປລແກລມ C
ພາສາແມ່ນສະຫນອງໃຫ້ໃນ bmake. ໂຄງສ້າງດັ່ງກ່າວທັງຫມົດແມ່ນຖືກກໍານົດໂດຍເສັ້ນເລີ່ມຕົ້ນດ້ວຍ
ຈຸດດຽວ ('.') ຕົວອັກສອນ. ໄຟລ໌ໄດ້ຖືກລວມເຂົ້າກັບທັງສອງ .ລວມທັງ ⟨ເອກະສານ⟩ ຫຼື .ລວມທັງ
"ເອກະສານ". ຕົວແປລະຫວ່າງວົງເລັບມຸມຫຼືວົງຢືມຄູ່ຖືກຂະຫຍາຍເພື່ອສ້າງໄຟລ໌
ຊື່. ຖ້າວົງເລັບມຸມຖືກໃຊ້, makefile ລວມແມ່ນຄາດວ່າຈະຢູ່ໃນລະບົບ
makefile directory. ຖ້າວົງຢືມສອງເທົ່າຖືກນໍາໃຊ້, ລວມທັງໄດເລກະທໍລີຂອງ makefile ແລະໃດໆ
ໄດເລກະທໍລີທີ່ລະບຸໂດຍໃຊ້ -I ທາງເລືອກແມ່ນຊອກຫາກ່ອນລະບົບ makefile directory.
ສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບສະບັບອື່ນໆຂອງ bmake 'ລວມໄຟລ໌ ...' ຍັງຖືກຍອມຮັບ.
ຖ້າຄໍາຖະແຫຼງທີ່ລວມຖືກຂຽນເປັນ .-ລວມທັງ ຫຼືເປັນ .ຮວມ ຫຼັງຈາກນັ້ນຄວາມຜິດພາດສະຖານທີ່ແລະ / ຫຼື
ການເປີດລວມມີໄຟລ໌ຖືກລະເລີຍ.
ຖ້າຄໍາຖະແຫຼງທີ່ລວມຖືກຂຽນເປັນ .din ລວມ ບໍ່ພຽງແຕ່ມີຂໍ້ຜິດພາດໃນການຄົ້ນຫາແລະ / ຫຼືການເປີດ
ຮວມໄຟລ໌ທີ່ຖືກລະເລີຍ, ແຕ່ການເພິ່ງພາອາໄສທີ່ຄົງຢູ່ພາຍໃນໄຟລ໌ທີ່ລວມມານັ້ນຈະຖືກລະເລີຍພຽງແຕ່
ຄື .MAKE.DEPENDFILE.
ການສະແດງອອກຕາມເງື່ອນໄຂແມ່ນນຳໜ້າດ້ວຍຈຸດດຽວເປັນຕົວອັກສອນທຳອິດຂອງແຖວ.
ເງື່ອນໄຂທີ່ເປັນໄປໄດ້ມີດັ່ງນີ້:
.ຜິດພາດ ຂໍ້ຄວາມ
ຂໍ້ຄວາມຖືກພິມພ້ອມກັບຊື່ makefile ແລະເລກແຖວ, ຫຼັງຈາກນັ້ນ
bmake ຈະອອກ.
.ສົ່ງອອກ ຕົວແປ ...
ສົ່ງອອກຕົວແປທົ່ວໂລກທີ່ລະບຸ. ຖ້າບໍ່ມີລາຍຊື່ຕົວແປແມ່ນສະຫນອງໃຫ້, ທົ່ວໂລກທັງຫມົດ
ຖືກສົ່ງອອກຍົກເວັ້ນຕົວແປພາຍໃນ (ທີ່ເລີ່ມຕົ້ນດ້ວຍ '.'). ນີ້ບໍ່ແມ່ນ
ໄດ້ຮັບຜົນກະທົບຈາກ -X ທຸງ, ສະນັ້ນຄວນໃຊ້ຢ່າງລະມັດລະວັງ. ສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບ
ອື່ນໆ bmake ໂປຣແກມ 'export variable=value' ຍັງຖືກຍອມຮັບ.
ການຕໍ່ທ້າຍຊື່ຕົວແປກັບ .MAKE.ສົ່ງອອກ ເທົ່າກັບການສົ່ງອອກຕົວແປ.
.ສົ່ງອອກ-env ຕົວແປ ...
ອັນດຽວກັນກັບ '.export', ຍົກເວັ້ນຕົວແປຈະບໍ່ຖືກຕໍ່ທ້າຍ .MAKE.ສົ່ງອອກ.
ນີ້ອະນຸຍາດໃຫ້ສົ່ງອອກມູນຄ່າກັບສະພາບແວດລ້ອມທີ່ແຕກຕ່າງຈາກການນໍາໃຊ້
by bmake ພາຍໃນ.
.export-literal ຕົວແປ ...
ອັນດຽວກັນກັບ '.export-env', ຍົກເວັ້ນຕົວແປໃນມູນຄ່າຈະບໍ່ຖືກຂະຫຍາຍ.
.INFO ຂໍ້ຄວາມ
ຂໍ້ຄວາມຖືກພິມພ້ອມກັບຊື່ makefile ແລະເລກແຖວ.
.undef ຕົວແປ
ຍົກເລີກການກຳນົດຕົວແປທົ່ວໂລກທີ່ລະບຸໄວ້. ມີພຽງແຕ່ຕົວແປທົ່ວໂລກເທົ່ານັ້ນທີ່ບໍ່ສາມາດກໍານົດໄດ້.
.ບໍ່ສົ່ງອອກ ຕົວແປ ...
ກົງກັນຂ້າມກັບ '.ສົ່ງອອກ'. ທົ່ວໂລກທີ່ລະບຸໄວ້ ຕົວແປ ຈະຖືກໂຍກຍ້າຍອອກຈາກ
.MAKE.ສົ່ງອອກ. ຖ້າບໍ່ມີລາຍຊື່ຕົວແປຖືກສະຫນອງໃຫ້, ທົ່ວໂລກທັງຫມົດແມ່ນບໍ່ສົ່ງອອກ, ແລະ
.MAKE.ສົ່ງອອກ ລຶບແລ້ວ.
.unexport-env
ຍົກເລີກການສົ່ງອອກທັງຫມົດໃນທົ່ວໂລກທີ່ໄດ້ສົ່ງອອກໃນເມື່ອກ່ອນແລະລົບລ້າງສະພາບແວດລ້ອມສືບທອດຈາກ
ພໍ່ແມ່. ການດໍາເນີນງານນີ້ຈະເຮັດໃຫ້ເກີດການຮົ່ວໄຫລຂອງຫນ່ວຍຄວາມຈໍາຂອງສະພາບແວດລ້ອມຕົ້ນສະບັບ, ດັ່ງນັ້ນ
ຄວນໄດ້ຮັບການນໍາໃຊ້ພຽງພໍ. ການທົດສອບສໍາລັບ .MAKE.LEVEL ເປັນ 0, ຈະເຮັດໃຫ້ຄວາມຮູ້ສຶກ. ນອກຈາກນີ້
ຈື່ໄວ້ວ່າຕົວແປທີ່ມາຈາກສະພາບແວດລ້ອມຂອງພໍ່ແມ່ຄວນຈະເປັນ
ຮັກສາໄວ້ຢ່າງຊັດເຈນຖ້າຕ້ອງການ. ຍົກຕົວຢ່າງ:
.if ${.MAKE.LEVEL} == 0
ເສັ້ນທາງ := ${PATH}
.unexport-env
.ເສັ້ນທາງການສົ່ງອອກ
.endif
ຈະສົ່ງຜົນໃຫ້ສະພາບແວດລ້ອມທີ່ມີພຽງແຕ່ 'PATH', ເຊິ່ງເປັນປະໂຫຍດຫນ້ອຍທີ່ສຸດ
ສະພາບແວດລ້ອມ. ຕົວຈິງແລ້ວ '.MAKE.LEVEL' ຍັງຈະຖືກຍູ້ເຂົ້າໄປໃນສະພາບແວດລ້ອມໃໝ່.
.ຄໍາເຕືອນ ຂໍ້ຄວາມ
ຂໍ້ຄວາມທີ່ນຳໜ້າໂດຍ 'ຄຳ ເຕືອນ:' ຖືກພິມພ້ອມກັບຊື່ຂອງ makefile
ແລະເລກແຖວ.
.ຖ້າ [!]ການສະແດງອອກ [ປະຕິບັດການ ການສະແດງອອກ ...]
ທົດສອບມູນຄ່າຂອງການສະແດງຜົນ.
.ifdef [!]ຕົວແປ [ປະຕິບັດການ ຕົວແປ ...]
ທົດສອບຄ່າຂອງຕົວແປ.
.ifndef [!]ຕົວແປ [ປະຕິບັດການ ຕົວແປ ...]
ທົດສອບຄ່າຂອງຕົວແປ.
.ifmake [!]ເປົ້າຫມາຍ [ປະຕິບັດການ ເປົ້າຫມາຍ ...]
ທົດສອບເປົ້າຫມາຍທີ່ຖືກສ້າງຂຶ້ນ.
.ifnmake [!] ເປົ້າຫມາຍ [ປະຕິບັດການ ເປົ້າຫມາຍ ...]
ທົດສອບເປົ້າຫມາຍທີ່ຖືກສ້າງຂຶ້ນ.
.ອື່ນ ປີ້ນກັບຄວາມຮູ້ສຶກຂອງເງື່ອນໄຂສຸດທ້າຍ.
.elif [!] ການສະແດງອອກ [ປະຕິບັດການ ການສະແດງອອກ ...]
ປະສົມປະສານຂອງ '.ອື່ນ'ຕິດຕາມດ້ວຍ'.ຖ້າ'.
.elifdef [!]ຕົວແປ [ປະຕິບັດການ ຕົວແປ ...]
ປະສົມປະສານຂອງ '.ອື່ນ'ຕິດຕາມດ້ວຍ'.ifdef'.
.elifndef [!]ຕົວແປ [ປະຕິບັດການ ຕົວແປ ...]
ປະສົມປະສານຂອງ '.ອື່ນ'ຕິດຕາມດ້ວຍ'.ifndef'.
.elifmake [!]ເປົ້າຫມາຍ [ປະຕິບັດການ ເປົ້າຫມາຍ ...]
ປະສົມປະສານຂອງ '.ອື່ນ'ຕິດຕາມດ້ວຍ'.ifmake'.
.elifnmake [!]ເປົ້າຫມາຍ [ປະຕິບັດການ ເປົ້າຫມາຍ ...]
ປະສົມປະສານຂອງ '.ອື່ນ'ຕິດຕາມດ້ວຍ'.ifnmake'.
.endif ສິ້ນສຸດຮ່າງກາຍຂອງເງື່ອນໄຂ.
ໄດ້ ປະຕິບັດການ ອາດຈະເປັນອັນໃດອັນໜຶ່ງຕໍ່ໄປນີ້:
|| ເຫດຜົນ OR.
&& ເຫດຜົນ AND; ເໜືອກວ່າ “||”.
ເຊັ່ນດຽວກັບ C, bmake ພຽງແຕ່ຈະປະເມີນເງື່ອນໄຂເທົ່າທີ່ມີຄວາມຈໍາເປັນເພື່ອກໍານົດມັນ
ຄ່າ. ວົງເລັບອາດຈະຖືກໃຊ້ເພື່ອປ່ຽນລຳດັບການປະເມີນ. ຕົວປະຕິບັດການ boolean '!'
ອາດຈະຖືກໃຊ້ເພື່ອປະຕິເສດຢ່າງມີເຫດຜົນຕາມເງື່ອນໄຂທັງໝົດ. ມັນເປັນອັນດັບສູງກ່ວາ
'&&'.
ມູນຄ່າຂອງ ການສະແດງອອກ ອາດຈະເປັນອັນໃດອັນໜຶ່ງຕໍ່ໄປນີ້:
ກໍານົດໄວ້ ເອົາຊື່ຕົວແປເປັນ argument ແລະປະເມີນເປັນ true ຖ້າຕົວແປໄດ້
ກໍານົດ.
ເຮັດໃຫ້ ເອົາຊື່ເປົ້າຫມາຍເປັນການໂຕ້ຖຽງແລະປະເມີນວ່າເປັນຄວາມຈິງຖ້າເປົ້າຫມາຍແມ່ນ
ລະບຸເປັນສ່ວນຫນຶ່ງຂອງ bmakeເສັ້ນຄໍາສັ່ງ ຫຼືຖືກປະກາດວ່າເປັນເປົ້າໝາຍເລີ່ມຕົ້ນ
(ທັງ implicitly ຫຼືຢ່າງຊັດເຈນ, ເບິ່ງ .ຫຼັກ) ກ່ອນເສັ້ນທີ່ປະກອບດ້ວຍ
ເງື່ອນໄຂ.
ຫວ່າງເປົ່າ ເອົາຕົວແປ, ກັບຕົວແກ້ໄຂທີ່ເປັນໄປໄດ້, ແລະປະເມີນວ່າເປັນຄວາມຈິງຖ້າການຂະຫຍາຍ
ຂອງຕົວແປຈະສົ່ງຜົນໃຫ້ string ຫວ່າງເປົ່າ.
ຢູ່ ເອົາຊື່ໄຟລ໌ເປັນ argument ແລະປະເມີນເປັນ true ຖ້າໄຟລ໌ມີຢູ່. ໄດ້
ໄຟລ໌ຖືກຄົ້ນຫາຢູ່ໃນເສັ້ນທາງຄົ້ນຫາລະບົບ (ເບິ່ງ .PATH).
ເປົ້າຫມາຍ ເອົາຊື່ເປົ້າຫມາຍເປັນການໂຕ້ຖຽງແລະປະເມີນວ່າເປັນຄວາມຈິງຖ້າເປົ້າຫມາຍດັ່ງກ່າວ
ກໍານົດ.
ຄໍາສັ່ງ
ເອົາຊື່ເປົ້າຫມາຍເປັນການໂຕ້ຖຽງແລະປະເມີນວ່າເປັນຄວາມຈິງຖ້າເປົ້າຫມາຍດັ່ງກ່າວ
ກໍານົດແລະມີຄໍາສັ່ງທີ່ກ່ຽວຂ້ອງກັບມັນ.
ການສະແດງອອກ ອາດເປັນການປຽບທຽບເລກເລກ ຫຼືສະຕຣິງ. ການຂະຫຍາຍຕົວແປແມ່ນປະຕິບັດ
ທັງສອງດ້ານຂອງການປຽບທຽບ, ຫຼັງຈາກນັ້ນມູນຄ່າລວມໄດ້ຖືກປຽບທຽບ. ມູນຄ່າແມ່ນ
ຖືກຕີຄວາມໝາຍເປັນເລກຖານສິບຫົກ ຖ້າມັນຖືກນຳໜ້າດ້ວຍ 0x, ຖ້າບໍ່ດັ່ງນັ້ນ ຈະເປັນເລກທົດສະນິຍົມ; ເລກແປດ
ບໍ່ຮອງຮັບ. ມາດຕະຖານ C relational operators ໄດ້ຮັບການສະຫນັບສະຫນູນທັງຫມົດ. ຖ້າຫຼັງ
ການຂະຫຍາຍຕົວແປ, ບໍ່ວ່າທາງຊ້າຍຫຼືຂວາມືຂອງ '=='ຫຼື'!=' operator ບໍ່ແມ່ນ
ຄ່າລວມ, ຫຼັງຈາກນັ້ນການປຽບທຽບສະຕຣິງແມ່ນດໍາເນີນການລະຫວ່າງຕົວແປທີ່ຂະຫຍາຍ. ຖ້າບໍ່ມີ
ຕົວປະຕິບັດການທີ່ກ່ຽວຂ້ອງແມ່ນໃຫ້, ມັນສົມມຸດວ່າຕົວແປທີ່ຂະຫຍາຍໄດ້ຖືກປຽບທຽບ
ຕໍ່ກັບ 0 ຫຼືສະຕຣິງຫວ່າງເປົ່າໃນກໍລະນີຂອງການປຽບທຽບສະຕຣິງ.
ເມື່ອໃດ bmake ກໍາລັງປະເມີນຫນຶ່ງໃນການສະແດງອອກທີ່ມີເງື່ອນໄຂເຫຼົ່ານີ້, ແລະມັນພົບກັບ (ສີຂາວ-
space ແຍກ) ຄໍາທີ່ມັນບໍ່ຮັບຮູ້, ບໍ່ວ່າຈະເປັນ "ເຮັດ" ຫຼື "ກໍານົດ" ສະແດງອອກ
ນໍາໃຊ້ກັບມັນ, ອີງຕາມຮູບແບບຂອງເງື່ອນໄຂ. ຖ້າຫາກວ່າຮູບແບບແມ່ນ '.ifdef',
'.ifndef', ຫຼື '.ຖ້າ' ການສະແດງອອກ "ກໍານົດ" ຖືກນໍາໃຊ້. ເຊັ່ນດຽວກັນ, ຖ້າຫາກວ່າແບບຟອມແມ່ນ
'.ifmake'ຫຼື'.ifnmake, ໄດ້'ເຮັດໃຫ້" ສະແດງອອກຖືກນໍາໃຊ້.
ຖ້າການປະເມີນເງື່ອນໄຂເປັນຄວາມຈິງ, ການແຍກວິເຄາະ makefile ຍັງສືບຕໍ່ຄືເກົ່າ. ຖ້າຫາກວ່າມັນ
ປະເມີນເປັນຜິດ, ແຖວຕໍ່ໄປນີ້ແມ່ນຂ້າມໄປ. ໃນທັງສອງກໍລະນີນີ້ສືບຕໍ່ຈົນກ່ວາ a
'.ອື່ນ'ຫຼື'.endif'ພົບ.
ສໍາລັບ loops ປົກກະຕິແລ້ວຖືກນໍາໃຊ້ເພື່ອນໍາໃຊ້ຊຸດຂອງກົດລະບຽບກັບບັນຊີລາຍຊື່ຂອງໄຟລ໌. syntax ຂອງ a
ສໍາລັບ loop ແມ່ນ:
.ສໍາລັບ ຕົວແປ [ຕົວແປ ...] in ການສະແດງອອກ
⟨ກົດລະບຽບ⟩
.endfor
ຫຼັງຈາກສໍາລັບການ ການສະແດງອອກ ຖືກປະເມີນ, ມັນຖືກແບ່ງອອກເປັນຄໍາສັບຕ່າງໆ. ໃນແຕ່ລະ iteration ຂອງ
loop, ຫນຶ່ງຄໍາຖືກປະຕິບັດແລະມອບຫມາຍໃຫ້ແຕ່ລະຄົນ ຕົວແປ, ໃນຄໍາສັ່ງ, ແລະເຫຼົ່ານີ້ ຕົວແປ ມີ
ແທນທີ່ ກົດລະບຽບ ພາຍໃນຮ່າງກາຍຂອງ loop ໄດ້. ຈໍານວນຂອງຄໍາສັບຕ້ອງ
ອອກມາແມ້ແຕ່; ນັ້ນແມ່ນ, ຖ້າມີສາມຕົວແປທີ່ຊ້ໍາກັນ, ຈໍານວນຄໍາທີ່ສະຫນອງໃຫ້
ຕ້ອງເປັນຕົວຄູນຂອງສາມ.
COMMENTS
ຄຳເຫັນເລີ່ມຕົ້ນດ້ວຍຕົວອັກສອນ hash ('#'), ທຸກບ່ອນແຕ່ຢູ່ໃນເສັ້ນຄຳສັ່ງ shell, ແລະ
ສືບຕໍ່ໄປຫາຈຸດສິ້ນສຸດຂອງແຖວໃໝ່ທີ່ບໍ່ໄດ້ຫຼົບຫຼີກ.
ພິເສດ ແຫຼ່ງຂໍ້ມູນ (ຄຸນລັກສະນະ)
.EXEC ເປົ້າໝາຍບໍ່ເຄີຍລ້າສະໄໝ, ແຕ່ຕ້ອງປະຕິບັດຄຳສັ່ງສະເໝີ.
.ບໍ່ສົນໃຈ ບໍ່ສົນໃຈຂໍ້ຜິດພາດໃດໆຈາກຄໍາສັ່ງທີ່ກ່ຽວຂ້ອງກັບເປົ້າຫມາຍນີ້, ຄືກັບວ່າ
ພວກເຂົາເຈົ້າທັງຫມົດແມ່ນນໍາຫນ້າໂດຍ dash ('-').
.ເຮັດ ໝາຍແຫຼ່ງທີ່ມາທັງໝົດຂອງເປົ້າໝາຍນີ້ວ່າທັນສະໄໝ.
.ເຮັດ ປະຕິບັດຄໍາສັ່ງທີ່ກ່ຽວຂ້ອງກັບເປົ້າຫມາຍນີ້ເຖິງແມ່ນວ່າ -n or -t ທາງເລືອກແມ່ນ
ລະບຸ. ປົກກະຕິແລ້ວໃຊ້ເພື່ອໝາຍ recursive bmakes.
.META ສ້າງໄຟລ໌ meta ສໍາລັບເປົ້າຫມາຍ, ເຖິງແມ່ນວ່າມັນຖືກທຸງເປັນ .PHONY, .ເຮັດ, ຫຼື
.ພິເສດ. ການນໍາໃຊ້ຮ່ວມກັບ .ເຮັດ ເປັນກໍລະນີທີ່ເປັນໄປໄດ້ທີ່ສຸດ. ໃນ "ເມຕາ"
ຮູບແບບ, ເປົ້າຫມາຍແມ່ນລ້າສະໄຫມຖ້າໄຟລ໌ meta ຫາຍໄປ.
.NOMETA ຢ່າສ້າງໄຟລ໌ meta ສໍາລັບເປົ້າຫມາຍ. ໄຟລ໌ Meta ຍັງບໍ່ໄດ້ຖືກສ້າງຂື້ນສໍາລັບ
.PHONY, .ເຮັດ, ຫຼື .ພິເສດ ເປົ້າ ໝາຍ.
.NOMETA_CMP
ບໍ່ສົນໃຈຄວາມແຕກຕ່າງໃນຄໍາສັ່ງໃນເວລາທີ່ຕັດສິນໃຈວ່າເປົ້າຫມາຍແມ່ນລ້າສະໄຫມ. ນີ້ແມ່ນ
ເປັນປະໂຫຍດຖ້າຄໍາສັ່ງປະກອບດ້ວຍຄ່າທີ່ມີການປ່ຽນແປງສະເຫມີ. ຖ້າຫາກວ່າຈໍານວນຂອງ
ຄໍາສັ່ງປ່ຽນແປງ, ເຖິງແມ່ນວ່າ, ເປົ້າຫມາຍຈະຍັງລ້າສະໄຫມ. ຜົນກະທົບດຽວກັນ
ໃຊ້ກັບບັນທັດຄໍາສັ່ງທີ່ໃຊ້ຕົວແປ .OODATE, ເຊິ່ງສາມາດໃຊ້ ສຳ ລັບ
ຈຸດປະສົງນັ້ນເຖິງແມ່ນວ່າໃນເວລາທີ່ບໍ່ຈໍາເປັນຢ່າງອື່ນຫຼືຕ້ອງການ:
ຂ້າມ-ປຽບທຽບສໍາລັບບາງ:
@echo ນີ້ຈະຖືກປຽບທຽບ
@echo ນີ້ຈະບໍ່ ${.OODATE:M.NOMETA_CMP}
@echo ນີ້ຍັງຈະຖືກປຽບທຽບ
ໄດ້ :M ຮູບແບບສະກັດກັ້ນການຂະຫຍາຍຕົວຂອງຕົວແປທີ່ບໍ່ຕ້ອງການ.
.NOPATH ຢ່າຄົ້ນຫາເປົ້າຫມາຍໃນໄດເລກະທໍລີທີ່ລະບຸໄວ້ໂດຍ .PATH.
.ບໍ່ມີ ປົກກະຕິແລ້ວ bmake ເລືອກເປົ້າໝາຍທຳອິດທີ່ມັນພົບເປັນເປົ້າໝາຍເລີ່ມຕົ້ນທີ່ຈະເປັນ
ສ້າງຂຶ້ນຖ້າບໍ່ໄດ້ລະບຸເປົ້າໝາຍ. ແຫຼ່ງນີ້ປ້ອງກັນເປົ້າຫມາຍນີ້ຈາກການເປັນ
ເລືອກ.
.ທາງເລືອກ
ຖ້າເປົ້າຫມາຍຖືກຫມາຍດ້ວຍຄຸນລັກສະນະນີ້ແລະ bmake ບໍ່ສາມາດຄິດອອກວິທີການສ້າງ
ມັນ, ມັນຈະບໍ່ສົນໃຈຄວາມຈິງນີ້ແລະສົມມຸດວ່າໄຟລ໌ບໍ່ຈໍາເປັນຫຼືມີຢູ່ແລ້ວ.
.PHONY ເປົ້າໝາຍບໍ່ກົງກັບເອກະສານຕົວຈິງ; ມັນໄດ້ຖືກພິຈາລະນາສະເຫມີ
ລ້າສະໄຫມ, ແລະຈະບໍ່ຖືກສ້າງຂື້ນດ້ວຍ -t ທາງເລືອກ. Suffix-transformation
ກົດລະບຽບບໍ່ໄດ້ນໍາໃຊ້ກັບ .PHONY ເປົ້າ ໝາຍ.
.PRECIOUS
ເມື່ອໃດ bmake ຖືກຂັດຈັງຫວະ, ມັນປົກກະຕິເອົາເປົ້າຫມາຍທີ່ເຮັດບາງສ່ວນ. ນີ້
ແຫຼ່ງປ້ອງກັນເປົ້າຫມາຍຈາກການຖືກໂຍກຍ້າຍ.
.ເຮັດຊ້ຳ
ຄໍາສັບຄ້າຍຄື .ເຮັດ.
.ງຽບ ຢ່າສະທ້ອນຄໍາສັ່ງໃດໆທີ່ກ່ຽວຂ້ອງກັບເປົ້າຫມາຍນີ້, ຄືກັບວ່າພວກເຂົາ
ທັງໝົດແມ່ນນຳໜ້າດ້ວຍເຄື່ອງໝາຍ ('@').
.ໃຊ້ ເຮັດໃຫ້ເປົ້າຫມາຍເຂົ້າໄປໃນ bmakeເວີຊັນຂອງມະຫາພາກ. ໃນເວລາທີ່ເປົ້າຫມາຍຖືກນໍາໃຊ້ເປັນ
ແຫຼ່ງສໍາລັບເປົ້າຫມາຍອື່ນ, ເປົ້າຫມາຍອື່ນໄດ້ຮັບຄໍາສັ່ງ, ແຫຼ່ງຂໍ້ມູນ, ແລະ
ຄຸນລັກສະນະ (ຍົກເວັ້ນ .ໃຊ້) ຂອງແຫຼ່ງຂໍ້ມູນ. ຖ້າເປົ້າໝາຍມີຄຳສັ່ງຢູ່ແລ້ວ,
ໄດ້ .ໃຊ້ ຄໍາສັ່ງຂອງເປົ້າຫມາຍແມ່ນໄດ້ຕື່ມໃສ່ໃຫ້ເຂົາເຈົ້າ.
.ໃຊ້ກ່ອນ
ຄືກັນ .ໃຊ້, ແຕ່ prepend ໄດ້ .ໃຊ້ກ່ອນ ຄໍາສັ່ງເປົ້າຫມາຍໄປຫາເປົ້າຫມາຍ.
.ລໍຖ້າ If .ລໍຖ້າ ປະກົດຢູ່ໃນເສັ້ນການເພິ່ງພາອາໄສ, ແຫຼ່ງທີ່ມາກ່ອນມັນໄດ້ຖືກສ້າງຂື້ນກ່ອນ
ແຫຼ່ງຂໍ້ມູນທີ່ປະສົບຜົນສໍາເລັດໃນເສັ້ນ. ນັບຕັ້ງແຕ່ຂຶ້ນກັບຂອງໄຟລ໌ແມ່ນບໍ່
ເຮັດຈົນກ່ວາໄຟລ໌ຕົວມັນເອງສາມາດເຮັດໄດ້, ນີ້ຍັງຢຸດເຊົາການ dependents
ສ້າງຂຶ້ນເວັ້ນເສຍແຕ່ວ່າພວກມັນຕ້ອງການສໍາລັບສາຂາອື່ນຂອງຕົ້ນໄມ້ທີ່ເພິ່ງພາອາໄສ. ດັ່ງນັ້ນໃຫ້:
x: ກ .ລໍຖ້າ ຂ
ສຽງສະທ້ອນ x
a:
ສະທ້ອນ ກ
b: b1
ສຽງສະທ້ອນ ຂ
b1:
ສຽງສະທ້ອນ b1
ຜົນຜະລິດແມ່ນ 'a', 'b1', 'b', 'x' ສະເໝີ.
ຄໍາສັ່ງທີ່ກໍານົດໂດຍ .ລໍຖ້າ ມີຄວາມກ່ຽວຂ້ອງພຽງແຕ່ສໍາລັບການເຮັດຂະຫນານ.
ພິເສດ ເປົ້າາຍ
ເປົ້າຫມາຍພິເສດອາດຈະບໍ່ຖືກລວມເຂົ້າກັບເປົ້າຫມາຍອື່ນໆ, ຫມາຍຄວາມວ່າພວກເຂົາຕ້ອງເປັນເປົ້າຫມາຍດຽວເທົ່ານັ້ນ
ລະບຸ.
.BEGIN ເສັ້ນຄໍາສັ່ງໃດໆທີ່ຕິດກັບເປົ້າຫມາຍນີ້ແມ່ນຖືກປະຕິບັດກ່ອນທີ່ຈະມີອັນອື່ນ
ເຮັດແລ້ວ.
.ເລີ່ມຕົ້ນ
ນີ້ແມ່ນປະເພດຂອງ a .ໃຊ້ ກົດລະບຽບສໍາລັບເປົ້າຫມາຍໃດຫນຶ່ງ (ທີ່ໄດ້ຖືກນໍາໃຊ້ພຽງແຕ່ເປັນແຫຼ່ງ) ທີ່
bmake ບໍ່ສາມາດຄິດອອກວິທີອື່ນເພື່ອສ້າງ. ພຽງແຕ່ໃຊ້ Shell script.
ໄດ້ .IMPSRC ຕົວແປຂອງເປົ້າຫມາຍທີ່ສືບທອດ .ເລີ່ມຕົ້ນຄໍາສັ່ງຂອງຖືກຕັ້ງເປັນ
ຊື່ຂອງເປົ້າຫມາຍຂອງຕົນເອງ.
.END ເສັ້ນຄໍາສັ່ງໃດໆທີ່ຕິດກັບເປົ້າຫມາຍນີ້ແມ່ນຖືກປະຕິບັດຫຼັງຈາກທຸກສິ່ງທຸກຢ່າງອື່ນ
ເຮັດແລ້ວ.
.ຜິດພາດ ເສັ້ນຄໍາສັ່ງໃດໆທີ່ຕິດກັບເປົ້າຫມາຍນີ້ຈະຖືກປະຕິບັດເມື່ອເປົ້າຫມາຍອື່ນລົ້ມເຫລວ.
ໄດ້ .ERROR_TARGET ຕົວແປຖືກຕັ້ງເປັນເປົ້າຫມາຍທີ່ລົ້ມເຫລວ. ເບິ່ງນຳ
MAKE_PRINT_VAR_ON_ERROR.
.ບໍ່ສົນໃຈ ໝາຍແຕ່ລະແຫຼ່ງດ້ວຍ .ບໍ່ສົນໃຈ ຄຸນລັກສະນະ. ຖ້າບໍ່ມີການລະບຸແຫຼ່ງທີ່ມາ,
ນີ້ແມ່ນເທົ່າກັບການລະບຸ -i ທາງເລືອກ.
.ຂັດຂວາງ
If bmake ຖືກຂັດຂວາງ, ຄໍາສັ່ງສໍາລັບເປົ້າຫມາຍນີ້ຈະຖືກປະຕິບັດ.
.ຫຼັກ ຖ້າຫາກວ່າບໍ່ມີເປົ້າຫມາຍແມ່ນໄດ້ລະບຸໄວ້ໃນເວລາທີ່ bmake ຖືກຮຽກຮ້ອງ, ເປົ້າໝາຍນີ້ຈະຖືກສ້າງຂຶ້ນ.
.ເຮັດທຸງ
ເປົ້າຫມາຍນີ້ສະຫນອງວິທີການກໍານົດທຸງສໍາລັບ bmake ໃນເວລາທີ່ makefile ຖືກນໍາໃຊ້.
ທຸງ ແມ່ນ ເປັນ ຖ້າ ຫາກ ວ່າ typed ກັບ ແກະ ໄດ້, ເຖິງ ແມ່ນ ວ່າ -f ທາງເລືອກຈະບໍ່ມີຜົນກະທົບ.
.NOPATH ສະ ໝັກ .NOPATH ຄຸນລັກສະນະຂອງແຫຼ່ງທີ່ລະບຸ.
.NOTPARALLEL
ປິດການນຳໃຊ້ໂໝດຂະໜານ.
.NO_PARALLEL
ຄໍາສັບຄ້າຍຄື .NOTPARALLEL, ສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບຕົວແປ pmake ອື່ນໆ.
.OBJDIR ແຫຼ່ງແມ່ນມູນຄ່າໃຫມ່ສໍາລັບ '.OBJDIR'. ຖ້າມັນມີຢູ່, bmake ຈະ chdir(2) ກັບມັນ
ແລະປັບປຸງມູນຄ່າຂອງ '.OBJDIR'.
.ສັ່ງ ເປົ້າຫມາຍທີ່ມີຊື່ແມ່ນເຮັດຕາມລໍາດັບ. ຄໍາສັ່ງນີ້ບໍ່ໄດ້ເພີ່ມເປົ້າຫມາຍໃສ່
ບັນຊີລາຍຊື່ເປົ້າຫມາຍທີ່ຈະເຮັດ. ນັບຕັ້ງແຕ່ຜູ້ທີ່ເພິ່ງພາອາໄສເປົ້າຫມາຍທີ່ບໍ່ໄດ້ຮັບການກໍ່ສ້າງ
ຈົນກ່ວາເປົ້າຫມາຍຂອງຕົນເອງສາມາດໄດ້ຮັບການກໍ່ສ້າງ, ເວັ້ນເສຍແຕ່ 'a' ແມ່ນການກໍ່ສ້າງໂດຍພາກສ່ວນອື່ນຂອງ
ເສັ້ນສະແດງການເພິ່ງພາອາໄສ, ຕໍ່ໄປນີ້ແມ່ນວົງການຂຶ້ນກັບ:
.ORDER: ba
ຂ: ກ
ຄໍາສັ່ງທີ່ກໍານົດໂດຍ .ສັ່ງ ມີຄວາມກ່ຽວຂ້ອງພຽງແຕ່ສໍາລັບການເຮັດຂະຫນານ.
.PATH ແຫຼ່ງຂໍ້ມູນແມ່ນໄດເລກະທໍລີທີ່ຈະຊອກຫາໄຟລ໌ທີ່ບໍ່ພົບຢູ່ໃນ
ໄດເລກະທໍລີປະຈຸບັນ. ຖ້າບໍ່ມີແຫຼ່ງໃດຖືກລະບຸ, ໃດໆທີ່ລະບຸໄວ້ກ່ອນຫນ້ານີ້
ໄດເລກະທໍລີຖືກລຶບ. ຖ້າແຫຼ່ງແມ່ນພິເສດ .DOTLAST ເປົ້າຫມາຍ, ຫຼັງຈາກນັ້ນ
ໄດເລກະທໍລີທີ່ເຮັດວຽກໃນປະຈຸບັນຖືກຄົ້ນຫາຫຼ້າສຸດ.
.PATH.បច្ច័យ
ຄື .PATH ແຕ່ນຳໃຊ້ກັບໄຟລ໌ທີ່ມີຄຳຕໍ່ທ້າຍສະເພາະເທົ່ານັ້ນ. ຄໍາຕໍ່ທ້າຍຕ້ອງ
ໄດ້ຖືກປະກາດໃນເມື່ອກ່ອນກັບ .SUFFIXES.
.PHONY ສະ ໝັກ .PHONY ຄຸນລັກສະນະຂອງແຫຼ່ງທີ່ລະບຸ.
.PRECIOUS
ສະ ໝັກ .PRECIOUS ຄຸນລັກສະນະຂອງແຫຼ່ງທີ່ລະບຸ. ຖ້າບໍ່ມີແຫຼ່ງ
ລະບຸ, ໄດ້ .PRECIOUS ຄຸນສົມບັດຖືກນຳໃຊ້ກັບທຸກເປົ້າໝາຍໃນໄຟລ໌.
.SHELL ກໍານົດແກະທີ່ bmake ຈະໃຊ້ເພື່ອປະຕິບັດຄໍາສັ່ງ. ແຫຼ່ງຂໍ້ມູນແມ່ນຊຸດຂອງ
field=value ຄູ່
ຊື່ ນີ້ແມ່ນສະເພາະຫນ້ອຍທີ່ສຸດ, ນໍາໃຊ້ເພື່ອເລືອກເອົາຫນຶ່ງໃນການສ້າງ
shell specs; sh, ksh, ແລະ csh.
ເສັ້ນທາງ ລະບຸເສັ້ນທາງໄປຫາແກະ.
hasErrCTl ຊີ້ບອກວ່າ shell ຮອງຮັບການອອກຍ້ອນຄວາມຜິດພາດຫຼືບໍ່.
ໃຫ້ກວດເບິ່ງ ຄໍາສັ່ງທີ່ຈະເປີດການກວດສອບຄວາມຜິດພາດ.
ບໍ່ສົນໃຈ ຄໍາສັ່ງປິດການກວດສອບຄວາມຜິດພາດ.
echo ຄໍາສັ່ງທີ່ຈະເປີດ echoing ຂອງຄໍາສັ່ງປະຕິບັດ.
ງຽບ ຄໍາສັ່ງທີ່ຈະປິດການສະທ້ອນຂອງຄໍາສັ່ງທີ່ປະຕິບັດ.
ການກັ່ນຕອງ ຜົນຜະລິດໃນການກັ່ນຕອງຫຼັງຈາກອອກ ງຽບ ຄໍາສັ່ງ. ມັນເປັນປົກກະຕິ
ຄືກັນກັບ ງຽບ.
errFlag ທຸງທີ່ຈະຜ່ານ shell ເພື່ອເປີດໃຊ້ການກວດສອບຄວາມຜິດພາດ.
echoFlag ທຸງທີ່ຈະຜ່ານ shell ເພື່ອເປີດໃຊ້ການສະທ້ອນຄໍາສັ່ງ.
ແຖວໃໝ່ ຕົວໜັງສືສະຕຣິງເພື່ອຜ່ານ shell ທີ່ສົ່ງຜົນໃຫ້ມີແຖວໃໝ່
ຕົວອັກສອນເມື່ອໃຊ້ນອກຕົວອັກສອນທີ່ອ້າງອີງໃດໆ.
ຕົວຢ່າງ:
.SHELL: name=ksh path=/bin/ksh hasErrCtl=true \
check="set -e" ignore="set +e" \
echo="ຕັ້ງ -v" ງຽບ = "ຕັ້ງ +v" ຕົວກອງ = "ຕັ້ງ +v" \
echoFlag=v errFlag=e newline="'\n'"
.ງຽບ ສະ ໝັກ .ງຽບ ຄຸນລັກສະນະຂອງແຫຼ່ງທີ່ລະບຸ. ຖ້າບໍ່ມີການລະບຸແຫຼ່ງທີ່ມາ,
ໄດ້ .ງຽບ attribute ຖືກນຳໃຊ້ກັບທຸກຄຳສັ່ງໃນໄຟລ໌.
.ຢຸດ ເປົ້າຫມາຍນີ້ໄດ້ຮັບການດໍາເນີນການໃນເວລາທີ່ໄຟລ໌ dependency ມີລາຍການ stale, ມີ .ALLSRC
ຕັ້ງເປັນຊື່ຂອງໄຟລ໌ທີ່ຂຶ້ນກັບນັ້ນ.
.SUFFIXES
ແຕ່ລະແຫຼ່ງລະບຸຄໍາຕໍ່ທ້າຍ bmake. ຖ້າບໍ່ມີການລະບຸແຫຼ່ງທີ່ມາ, ໃດ
ຄຳຕໍ່ທ້າຍທີ່ລະບຸໄວ້ກ່ອນໜ້າຈະຖືກລຶບອອກ. ມັນອະນຸຍາດໃຫ້ສ້າງ suffix-
ກົດລະບຽບການຫັນປ່ຽນ.
ຕົວຢ່າງ:
.SUFFIXES: .o
.co:
cc -o ${.TARGET} -c ${.IMPSRC}
ENVIRONMENT
bmake ໃຊ້ຕົວແປສະພາບແວດລ້ອມຕໍ່ໄປນີ້, ຖ້າພວກມັນມີ: MACHINE, MACHINE_ARCH,
MACHINE_MULTIARCH, MAKE, MAKEFLAGS, MAKEOBJDIR, MAKEOBJDIRPREFIX, MAKESYSPATH, PWD, ແລະ
TMPDIR.
MAKEOBJDIRPREFIX ແລະ MAKEOBJDIR ອາດຈະຖືກຕັ້ງຢູ່ໃນສະພາບແວດລ້ອມຫຼືຢູ່ໃນເສັ້ນຄໍາສັ່ງເພື່ອ
bmake ແລະບໍ່ແມ່ນຕົວແປ makefile; ເບິ່ງລາຍລະອຽດຂອງ '.OBJDIR' ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ.
ໃຊ້ bmake ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net