ນີ້ແມ່ນຄໍາສັ່ງ fmake ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍສະຖານີເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
ເຮັດໃຫ້ - ຮັກສາຄວາມຂຶ້ນກັບໂຄງການ
ສະຫຼຸບສັງລວມ
ເຮັດໃຫ້ [-ABPSXeiknpqrstv] [-C ລະບົບ] [-D ຕົວແປ] [-d ທົງ] [-E ຕົວແປ] [-f makefile]
[-I ລະບົບ] [-j ສູງສຸດ_ວຽກ] [-m ລະບົບ] [-V ຕົວແປ] [-x warning_options]
[ຕົວແປ=ມູນຄ່າ] [ເປົ້າຫມາຍ ...]
ລາຍລະອຽດ
ໄດ້ ເຮັດໃຫ້ ຜົນປະໂຫຍດແມ່ນໂຄງການທີ່ອອກແບບມາເພື່ອງ່າຍການບໍາລຸງຮັກສາໂຄງການອື່ນໆ. ຂອງມັນ
ການປ້ອນຂໍ້ມູນແມ່ນລາຍການສະເພາະທີ່ອະທິບາຍເຖິງຄວາມສຳພັນການເພິ່ງພາອາໄສລະຫວ່າງການຜະລິດ
ຂອງໄຟລ໌ແລະໂຄງການ.
ກ່ອນອື່ນ ໝົດ, ບັນຊີລາຍຊື່ເບື້ອງຕົ້ນຂອງຂໍ້ມູນສະເພາະຈະຖືກອ່ານຈາກລະບົບ makefile,
sys.mk, ເວັ້ນເສຍແຕ່ inhibited ກັບ -r ທາງເລືອກ. ມາດຕະຖານ sys.mk ດັ່ງທີ່ສົ່ງກັບ FreeBSD
ຍັງ handles make.conf(5), ເສັ້ນທາງເລີ່ມຕົ້ນທີ່ສາມາດປ່ຽນແປງໄດ້ໂດຍຜ່ານ ເຮັດໃຫ້ ຕົວແປ
__MAKE_CONF.
ຫຼັງຈາກນັ້ນ, ຄັ້ງທໍາອິດຂອງ BSDmakefile, makefile, ແລະ makefile ທີ່ສາມາດພົບເຫັນຢູ່ໃນປະຈຸບັນ
directory, object directory (ເບິ່ງ .OBJDIR), ຫຼືເສັ້ນທາງຄົ້ນຫາ (ເບິ່ງ -I option) ຈະຖືກອ່ານ
ສໍາລັບບັນຊີລາຍຊື່ຕົ້ນຕໍຂອງການຈໍາແນກການເພິ່ງພາອາໄສ. makefile ທີ່ແຕກຕ່າງກັນຫຼືບັນຊີລາຍຊື່ຂອງເຂົາເຈົ້າສາມາດເປັນ
ສະຫນອງໂດຍຜ່ານ -f ທາງເລືອກ. ສຸດທ້າຍ, ຖ້າໄຟລ໌ .ຂື້ນຢູ່ ສາມາດໄດ້ຮັບການພົບເຫັນຢູ່ໃນໃດໆຂອງ
ສະຖານທີ່ຂ້າງເທິງ, ມັນຍັງຈະຖືກອ່ານ (ເບິ່ງ mkdep(1)).
ເມື່ອໃດ ເຮັດໃຫ້ ຄົ້ນຫາ makefile, ຊື່ຂອງມັນມີຄວາມ ສຳ ຄັນກວ່າສະຖານທີ່ຂອງມັນ. ສໍາລັບ
ຕົວຢ່າງ, BSDmakefile ໃນລະບົບວັດຖຸຈະໄດ້ຮັບການນິຍົມຫຼາຍກວ່າ makefile ໃນປະຈຸບັນ
ລະບົບ.
ຕົວເລືອກມີດັ່ງນີ້:
-A ເຮັດໃຫ້ຄວາມຜິດພາດເກັບທີ່ບໍ່ແມ່ນຄວາມຕາຍ, ເຮັດໃຫ້ເກີດ ເຮັດໃຫ້ ພຽງແຕ່ຂ້າມສ່ວນທີ່ເຫຼືອຫຼືທັງຫມົດຂອງ
ເກັບໄວ້ແລະສືບຕໍ່ຫຼັງຈາກການພິມຂໍ້ຄວາມ.
-B ພະຍາຍາມທີ່ຈະເຂົ້າກັນໄດ້ກັບຄືນໄປບ່ອນໂດຍການປະຕິບັດ shell ດຽວຕໍ່ຄໍາສັ່ງແລະໂດຍ
ປະຕິບັດຄໍາສັ່ງເພື່ອເຮັດໃຫ້ແຫຼ່ງຂອງເສັ້ນເພິ່ງພາອາໄສຕາມລໍາດັບ. ນີ້
ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເວັ້ນເສຍແຕ່ -j ຖືກນໍາໃຊ້.
-C ລະບົບ
ປ່ຽນເປັນ ລະບົບ ກ່ອນທີ່ຈະອ່ານ makefiles ຫຼືເຮັດຫຍັງອີກ. ຖ້າ
ຫຼາຍ -C ທາງເລືອກແມ່ນໄດ້ລະບຸໄວ້, ແຕ່ລະຄົນແມ່ນໄດ້ຮັບການຕີລາຄາທຽບກັບອັນທີ່ຜ່ານມາ:
-C / -C ແລະອື່ນໆ ເທົ່າກັບ -C / ແລະອື່ນໆ.
-D ຕົວແປ
ກໍານົດ ຕົວແປ ເປັນ 1, ໃນສະພາບການໂລກ.
-d ທົງ
ເປີດການດີບັກ, ແລະລະບຸວ່າພາກສ່ວນໃດແດ່ ເຮັດໃຫ້ ແມ່ນເພື່ອພິມ debugging
ຂໍ້ມູນ. ການໂຕ້ຖຽງ ທົງ ແມ່ນໜຶ່ງ ຫຼືຫຼາຍອັນຕໍ່ໄປນີ້:
A ພິມຂໍ້ມູນ debugging ທີ່ເປັນໄປໄດ້ທັງຫມົດ; ເທົ່າກັບການລະບຸທັງຫມົດຂອງ
ທຸງ debugging.
a ພິມຂໍ້ມູນການດີບັ໊ກກ່ຽວກັບການຊອກຫາແຟ້ມຈັດເກັບ ແລະຖານຄວາມຈໍາ.
c ພິມຂໍ້ມູນການດີບັກກ່ຽວກັບການປະເມີນເງື່ອນໄຂ.
d ພິມຂໍ້ມູນການດີບັ໊ກກ່ຽວກັບການຊອກຫາໄດເລກະທໍລີ ແລະຖານຄວາມຈໍາ.
f ພິມຂໍ້ມູນການດີບັກກ່ຽວກັບການດໍາເນີນການສໍາລັບ loops.
g1 ພິມເສັ້ນສະແດງການປ້ອນຂໍ້ມູນກ່ອນທີ່ຈະເຮັດສິ່ງໃດ.
g2 ພິມເສັ້ນສະແດງການປ້ອນຂໍ້ມູນຫຼັງຈາກເຮັດທຸກຢ່າງ, ຫຼືກ່ອນທີ່ຈະອອກດ້ວຍຄວາມຜິດພາດ.
j ພິມຂໍ້ມູນການດີບັກກ່ຽວກັບການແລ່ນ Shell ຫຼາຍອັນ.
l ພິມຄໍາສັ່ງໃນ Makefiles ບໍ່ວ່າພວກມັນຈະຖືກນໍາຫນ້າຫຼືບໍ່
ໂດຍ @ ຫຼືທຸງ "ງຽບ" ອື່ນໆ. ເອີ້ນອີກຢ່າງໜຶ່ງວ່າ "ສຽງດັງ".
m ພິມຂໍ້ມູນການແກ້ບັນຫາກ່ຽວກັບການສ້າງເປົ້າໝາຍ, ລວມທັງການດັດແກ້
ວັນທີ.
s ພິມຂໍ້ມູນການດີບັກກ່ຽວກັບກົດລະບຽບການຫັນປ່ຽນ suffix.
t ພິມຂໍ້ມູນການແກ້ບັນຫາກ່ຽວກັບການຮັກສາລາຍຊື່ເປົ້າໝາຍ.
v ພິມຂໍ້ມູນການດີບັກກ່ຽວກັບການມອບໝາຍຕົວແປ.
-E ຕົວແປ
ລະບຸຕົວແປທີ່ຄ່າສະພາບແວດລ້ອມ (ຖ້າມີ) ຈະລົບລ້າງການມອບໝາຍມະຫາພາກ
ພາຍໃນ makefiles.
-e ລະບຸວ່າຄ່າສະພາບແວດລ້ອມແທນທີ່ການມອບໝາຍມະຫາພາກພາຍໃນ makefiles ສຳລັບທັງໝົດ
ຕົວແປ
-f makefile
ລະບຸ makefile ທີ່ຈະອ່ານແທນທີ່ຈະເປັນຄ່າເລີ່ມຕົ້ນ. ຖ້າ makefile ບໍ່ແມ່ນ
ຊື່ເສັ້ນທາງຢ່າງແທ້ຈິງ, ເຮັດໃຫ້ ຈະຄົ້ນຫາມັນຕາມທີ່ອະທິບາຍຂ້າງເທິງ. ໃນກໍລະນີ makefile is
'-', ການປ້ອນຂໍ້ມູນມາດຕະຖານຖືກອ່ານ. ຫຼາຍ -f ທາງເລືອກທີ່ສາມາດສະຫນອງໃຫ້, ແລະ makefiles ໄດ້
ຈະຖືກອ່ານໃນຄໍາສັ່ງນັ້ນ. ບໍ່ເຫມືອນກັບທາງເລືອກແຖວຄໍາສັ່ງອື່ນໆ, -f ແມ່ນບໍ່
ເກັບຮັກສາໄວ້ໃນ .ເຮັດທຸງ ແລະບໍ່ຖືກກົດດັນລົງໄປຫາການຜະລິດຍ່ອຍຜ່ານ MAKEFLAGS. ເບິ່ງຂ້າງລຸ່ມນີ້ສໍາລັບການເພີ່ມເຕີມ
ລາຍລະອຽດກ່ຽວກັບຕົວແປເຫຼົ່ານີ້.
-I ລະບົບ
ລະບຸໄດເລກະທໍລີທີ່ຈະຄົ້ນຫາ makefiles ແລະລວມເອົາ makefiles.
ຫຼາຍ -I ທາງເລືອກສາມາດຖືກກໍານົດເພື່ອສ້າງເສັ້ນທາງຄົ້ນຫາ. ລະບົບ makefile
ໄດເລກະທໍລີ (ຫຼືໄດເລກະທໍລີ, ເບິ່ງ -m option) ຈະຖືກຕໍ່ທ້າຍໂດຍອັດຕະໂນມັດຢູ່ຫາງ
ຂອງເສັ້ນທາງນີ້.
-i ບໍ່ສົນໃຈການອອກທີ່ບໍ່ແມ່ນສູນຂອງຄໍາສັ່ງ shell ໃນ makefile. ເທົ່າກັບການລະບຸ
'-' ກ່ອນແຕ່ລະເສັ້ນຄໍາສັ່ງໃນ makefile.
-j ສູງສຸດ_ວຽກ
ລະບຸຈໍານວນວຽກສູງສຸດທີ່ ເຮັດໃຫ້ ອາດຈະແລ່ນໃນເວລາໃດນຶ່ງ.
ປິດໂໝດຄວາມເຂົ້າກັນໄດ້, ເວັ້ນເສຍແຕ່ວ່າ -B ທຸງຍັງຖືກລະບຸໄວ້.
-k ສືບຕໍ່ການປຸງແຕ່ງຫຼັງຈາກພົບຂໍ້ຜິດພາດ, ແຕ່ວ່າພຽງແຕ່ຢູ່ໃນເປົ້າຫມາຍເຫຼົ່ານັ້ນເທົ່ານັ້ນ
ບໍ່ຂຶ້ນກັບເປົ້າຫມາຍທີ່ການສ້າງທີ່ເຮັດໃຫ້ເກີດຄວາມຜິດພາດ.
-m ລະບົບ
ລະບຸໄດເລກະທໍລີທີ່ຈະຄົ້ນຫາລະບົບ makefile ແລະ makefiles
ລວມຜ່ານ <...> style. ຫຼາຍ -m ທາງເລືອກສາມາດຖືກກໍານົດເພື່ອສ້າງການຄົ້ນຫາ
ເສັ້ນທາງ. ເສັ້ນທາງນີ້ຈະ override ລະບົບເລີ່ມຕົ້ນປະກອບມີເສັ້ນທາງ,
/usr/share/mk-freebsd. ລະບົບປະກອບມີເສັ້ນທາງສະເຫມີຈະຖືກຄັດຕິດໃສ່
ເສັ້ນທາງຄົ້ນຫາທີ່ໃຊ້ສໍາລັບ "..."-style inclusions ແລະ makefile searches (ເບິ່ງ -I
ທາງເລືອກ).
ຖ້າໄຟລ໌ຫຼືຊື່ໄດເລກະທໍລີຢູ່ໃນ -m ການໂຕ້ຖຽງ (ຫຼືສະພາບແວດລ້ອມ MAKESYSPATH
variable) ເລີ່ມຕົ້ນດ້ວຍ string ".../" ຈາກນັ້ນ ເຮັດໃຫ້ ຈະຊອກຫາໄຟລ໌ທີ່ລະບຸໄວ້
ຫຼືໄດເລກະທໍລີທີ່ມີຊື່ຢູ່ໃນສ່ວນທີ່ຍັງເຫຼືອຂອງສະຕຣິງອາກິວເມັນ. ການຄົ້ນຫາເລີ່ມຕົ້ນ
ກັບໄດເລກະທໍລີປະຈຸບັນຂອງ Makefile ແລະຫຼັງຈາກນັ້ນເຮັດວຽກຂຶ້ນໄປສູ່ຮາກຂອງ
ລະບົບໄຟລ໌. ຖ້າການຄົ້ນຫາປະສົບຜົນສໍາເລັດ, ໄດເລກະທໍລີຜົນໄດ້ຮັບຈະປ່ຽນແທນ
ສະເພາະ ".../" ໃນ -m ການໂຕ້ຖຽງ. ຖ້າຖືກນໍາໃຊ້, ຄຸນນະສົມບັດນີ້ອະນຸຍາດໃຫ້ ເຮັດໃຫ້ to
ຄົ້ນຫາຢ່າງງ່າຍດາຍໃນຕົ້ນໄມ້ແຫຼ່ງປະຈຸບັນສໍາລັບໄຟລ໌ sys.mk ທີ່ປັບແຕ່ງເອງ (ເຊັ່ນ: ໂດຍໃຊ້
".../mk/sys.mk" ເປັນການໂຕ້ຖຽງ). ໃຫ້ສັງເກດວ່າ ກ -C ທີ່ຢູ່ ກ່ອນຫນ້ານີ້ໃນຄໍາສັ່ງ
ເສັ້ນສົ່ງຜົນກະທົບຕໍ່ບ່ອນໃດ -m ".../" ຄົ້ນຫາ.
-n ສະແດງຄໍາສັ່ງທີ່ຈະຖືກປະຕິບັດ, ແຕ່ບໍ່ໄດ້ປະຕິບັດຕົວຈິງ
ໃຫ້ເຂົາເຈົ້າ.
-P ຮວບຮວມຜົນໄດ້ຮັບຂອງວຽກທີ່ໃຫ້ໄວ້ ແລະສະແດງມັນພຽງແຕ່ເມື່ອວຽກສໍາເລັດ, ແທນ
ຂອງການປະສົມຜົນຜະລິດຂອງວຽກຂະຫນານເຂົ້າກັນ. ຕົວເລືອກນີ້ບໍ່ມີຜົນໃດໆເວັ້ນເສຍແຕ່ -j
ຖືກໃຊ້ຄືກັນ.
-p ພຽງແຕ່ພິມເສັ້ນສະແດງການປ້ອນຂໍ້ມູນ, ບໍ່ໄດ້ປະຕິບັດຄໍາສັ່ງໃດໆ. ຜົນຜະລິດແມ່ນຄືກັນກັບ
-d g1. ເມື່ອລວມເຂົ້າກັບ -f / dev / null, ພຽງແຕ່ກົດລະບຽບການກໍ່ສ້າງຂອງ ເຮັດໃຫ້ ມີ
ສະແດງ.
-Q ງຽບເປັນພິເສດ. ສໍາລັບການເຮັດຫຼາຍວຽກ, ນີ້ຈະເຮັດໃຫ້ປ້າຍໂຄສະນາໄຟລ໌ບໍ່ແມ່ນ
ສ້າງຂຶ້ນ.
-q ຢ່າປະຕິບັດຄໍາສັ່ງໃດໆ, ແຕ່ອອກ 0 ຖ້າເປົ້າຫມາຍທີ່ກໍານົດໄວ້ແມ່ນທັນສະໄຫມແລະ
1, ຖ້າບໍ່ດັ່ງນັ້ນ.
-r ຢ່າປະມວນຜົນ makefile ລະບົບ.
-S ຢຸດການປະມວນຜົນເມື່ອພົບຂໍ້ຜິດພາດ. ພຶດຕິກຳເລີ່ມຕົ້ນ. ນີ້ແມ່ນຈໍາເປັນເພື່ອ
ລົບລ້າງ -k ທາງເລືອກໃນລະຫວ່າງການສ້າງ recursive.
-s ຢ່າສະທ້ອນຄໍາສັ່ງໃດໆຍ້ອນວ່າພວກມັນຖືກປະຕິບັດ. ເທົ່າກັບການລະບຸ '@'ກ່ອນ
ແຕ່ລະເສັ້ນຄໍາສັ່ງໃນ makefile.
-t ແທນທີ່ຈະສ້າງເປົ້າຫມາຍໃຫມ່ຕາມທີ່ລະບຸໄວ້ໃນ makefile, ສ້າງມັນຫຼືປັບປຸງ
ເວລາການດັດແປງຂອງມັນເພື່ອເຮັດໃຫ້ມັນປະກົດຂຶ້ນ-ທັນສະໄຫມ.
-V ຕົວແປ
ພິມ ເຮັດໃຫ້ແນວຄວາມຄິດຂອງມູນຄ່າຂອງ ຕົວແປ, ໃນສະພາບການທົ່ວໂລກ. ບໍ່ສ້າງໃດໆ
ເປົ້າໝາຍ. ຫຼາຍຕົວຢ່າງຂອງຕົວເລືອກນີ້ອາດຈະຖືກລະບຸ; ຕົວແປຈະເປັນ
ພິມຫນຶ່ງຕໍ່ແຖວ, ໂດຍມີເສັ້ນຫວ່າງເປົ່າສໍາລັບແຕ່ລະຕົວແປ null ຫຼືບໍ່ໄດ້ກໍານົດ. ຖ້າ
ຕົວແປ ປະກອບດ້ວຍ '$' ຫຼັງຈາກນັ້ນ, ມູນຄ່າຈະຖືກຂະຫຍາຍກ່ອນທີ່ຈະພິມ.
-v ເປັນ verbose ພິເສດ. ພິມຂໍ້ມູນເພີ່ມເຕີມໃດໆ.
-X ເມື່ອ ນຳ ໃຊ້ -V ທາງເລືອກທີ່ຈະພິມຄຸນຄ່າຂອງຕົວປ່ຽນແປງໄດ້, ບໍ່ໄດ້ຂະຫຍາຍ recursively
ຄຸນຄ່າ.
ຕົວແປ=ມູນຄ່າ
ກໍານົດຄ່າຂອງຕົວແປ ຕົວແປ to ມູນຄ່າ.
-x warning_options
ລະບຸຕົວເລືອກການເຕືອນໄພຂະຫຍາຍ. ຕົວເລືອກນີ້ອາດຈະຖືກລະບຸຫຼາຍຄັ້ງ. ກ
warning_option ສາມາດຖືກນຳໜ້າດ້ວຍ “ບໍ່” ໃນກໍລະນີທີ່ມີການປິດການເຕືອນໄພ.
ທາງເລືອກທີ່ມີຢູ່ໃນປັດຈຸບັນແມ່ນ:
dirsyntax
ເຕືອນ ຖ້າ ຫາກ ວ່າ ສິ່ງ ໃດ ແດ່ ຍົກ ເວັ້ນ ຫວ່າງ ເປົ່າ ແລະ ຄໍາ ເຫັນ ດັ່ງ ຕໍ່ ໄປ ນີ້ ເປັນ .endif or .ອື່ນ
ທິດທາງ.
ເບິ່ງອີກ .ເຕືອນ ເປົ້າຫມາຍພິເສດ.
ມີເຈັດປະເພດທີ່ແຕກຕ່າງກັນຂອງສາຍໃນ makefile: ຂໍ້ມູນຈໍາເພາະຂຶ້ນກັບໄຟລ໌,
ຄໍາສັ່ງ shell, ການມອບຫມາຍຕົວແປ, ປະກອບມີຄໍາຖະແຫຼງ, ຄໍາສັ່ງຕາມເງື່ອນໄຂ, ສໍາລັບ loops,
ແລະ ຄຳ ເຫັນ.
ໂດຍທົ່ວໄປແລ້ວ, ແຖວອາດຈະສືບຕໍ່ຈາກແຖວໜຶ່ງໄປຫາແຖວຕໍ່ໄປໂດຍການສິ້ນສຸດພວກມັນດ້ວຍ backslash
('\'). ຕົວອັກສອນແຖວໃໝ່ຕໍ່ທ້າຍ ແລະຊ່ອງຫວ່າງເບື້ອງຕົ້ນໃນແຖວຕໍ່ໄປນີ້ແມ່ນ
ບີບອັດເຂົ້າໄປໃນຊ່ອງດຽວ.
ເອກະສານ ແຕກຕ່າງ ນະລັກສະນະ
ເສັ້ນການເພິ່ງພາອາໄສປະກອບດ້ວຍໜຶ່ງ ຫຼືຫຼາຍເປົ້າໝາຍ, ຕົວດຳເນີນການ, ແລະແຫຼ່ງສູນ ຫຼືຫຼາຍກວ່ານັ້ນ.
ນີ້ສ້າງຄວາມສໍາພັນທີ່ເປົ້າຫມາຍ "ຂຶ້ນກັບ" ແຫຼ່ງຂໍ້ມູນແລະປົກກະຕິແລ້ວ
ສ້າງຂຶ້ນຈາກເຂົາເຈົ້າ. ການພົວພັນທີ່ແນ່ນອນລະຫວ່າງເປົ້າຫມາຍແລະແຫຼ່ງແມ່ນຖືກກໍານົດ
ໂດຍຜູ້ປະກອບການທີ່ແຍກພວກມັນ. ສາມປະຕິບັດການດັ່ງຕໍ່ໄປນີ້:
: ເປົ້າໝາຍຖືກພິຈາລະນາວ່າລ້າສະໄໝ ຖ້າເວລາການດັດແກ້ຂອງມັນໜ້ອຍກວ່າອັນໃດນຶ່ງ
ຂອງແຫຼ່ງຂໍ້ມູນຂອງຕົນ. ແຫຼ່ງທີ່ມາຂອງເປົ້າໝາຍສະສົມຜ່ານສາຍການເພິ່ງພາອາໄສເມື່ອອັນນີ້
ປະຕິບັດການຖືກນໍາໃຊ້. ເປົ້າຫມາຍໄດ້ຖືກໂຍກຍ້າຍອອກຖ້າຫາກວ່າ ເຮັດໃຫ້ ຂັດຂວາງ.
! ເປົ້າໝາຍຖືກສ້າງໃໝ່ສະເໝີ, ແຕ່ບໍ່ແມ່ນຈົນກວ່າທຸກແຫຼ່ງໄດ້ຮັບການກວດກາ ແລະສ້າງຄືນໃໝ່.
ສ້າງຂຶ້ນຕາມຄວາມຈໍາເປັນ. ແຫຼ່ງທີ່ມາຂອງເປົ້າໝາຍສະສົມຜ່ານສາຍການເພິ່ງພາອາໄສເມື່ອອັນນີ້
ປະຕິບັດການຖືກນໍາໃຊ້. ເປົ້າຫມາຍໄດ້ຖືກໂຍກຍ້າຍອອກຖ້າຫາກວ່າ ເຮັດໃຫ້ ຂັດຂວາງ.
:: ຖ້າບໍ່ມີແຫຼ່ງໃດຖືກລະບຸ, ເປົ້າໝາຍຈະຖືກສ້າງໃໝ່ສະເໝີ. ຖ້າບໍ່ດັ່ງນັ້ນ, ເປົ້າຫມາຍແມ່ນ
ພິຈາລະນາວ່າລ້າສະໄຫມຖ້າຫາກວ່າແຫຼ່ງໃດຂອງມັນໄດ້ຖືກດັດແກ້ຫຼາຍກ່ວາບໍ່ດົນມານີ້
ເປົ້າຫມາຍ. ແຫຼ່ງຂໍ້ມູນສໍາລັບເປົ້າຫມາຍບໍ່ສະສົມຫຼາຍກວ່າເສັ້ນການເພິ່ງພາອາໄສໃນເວລາທີ່ນີ້
ປະຕິບັດການຖືກນໍາໃຊ້. ເປົ້າຫມາຍຈະບໍ່ຖືກໂຍກຍ້າຍອອກຖ້າຫາກວ່າ ເຮັດໃຫ້ ຂັດຂວາງ.
ເປົ້າໝາຍ ແລະແຫຼ່ງທີ່ມາອາດມີຕົວສະແດງຕົວຫຍໍ້ຂອງ shell '?', '*', '[]' ແລະ '{}'. ໄດ້
expressions '?', '*' ແລະ '[]' ອາດຈະຖືກໃຊ້ເປັນສ່ວນໜຶ່ງຂອງອົງປະກອບສຸດທ້າຍຂອງເປົ້າໝາຍເທົ່ານັ້ນ.
ຫຼືແຫຼ່ງ, ແລະຕ້ອງຖືກນໍາໃຊ້ເພື່ອອະທິບາຍໄຟລ໌ທີ່ມີຢູ່. ຄຳວ່າ '{}' ບໍ່ຕ້ອງການ
ຈໍາເປັນຕ້ອງໄດ້ຖືກນໍາໃຊ້ເພື່ອອະທິບາຍໄຟລ໌ທີ່ມີຢູ່ແລ້ວ. ການຂະຫຍາຍຢູ່ໃນລໍາດັບໄດເລກະທໍລີ, ບໍ່ແມ່ນ
ຕາມຕົວອັກສອນທີ່ເຮັດຢູ່ໃນແກະ.
SHELL ສາມາດ
ແຕ່ລະເປົ້າຫມາຍອາດຈະກ່ຽວຂ້ອງກັບມັນຊຸດຂອງຄໍາສັ່ງ shell, ປົກກະຕິແລ້ວໃຊ້ເພື່ອສ້າງ
ເປົ້າຫມາຍ. ແຕ່ລະຄໍາສັ່ງໃນ script ນີ້ ຕ້ອງ ຖືກນໍາຫນ້າດ້ວຍແຖບ. ໃນຂະນະທີ່ໃດ
ເປົ້າຫມາຍອາດຈະປາກົດຢູ່ໃນເສັ້ນການເພິ່ງພາອາໄສ, ມີພຽງແຕ່ຫນຶ່ງຂອງການເພິ່ງພາອາໄສເຫຼົ່ານີ້ອາດຈະປະຕິບັດຕາມໂດຍ a
script ການສ້າງ, ເວັ້ນເສຍແຕ່ວ່າ '::' operator ຖືກນໍາໃຊ້.
ຖ້າຕົວອັກສອນທໍາອິດຂອງແຖວຄໍາສັ່ງແມ່ນ '@','-', ແລະ/ຫຼື '+', ຄໍາສັ່ງຖືກປະຕິບັດ
ພິເສດ. A '@' ເຮັດໃຫ້ຄໍາສັ່ງບໍ່ຖືກສະທ້ອນກ່ອນທີ່ຈະຖືກປະຕິບັດ. A '-' ສາເຫດ
ສະຖານະການອອກທີ່ບໍ່ແມ່ນສູນຂອງບັນທັດຄໍາສັ່ງທີ່ຈະບໍ່ສົນໃຈ. A '+' ເຮັດໃຫ້ຄໍາສັ່ງທີ່ຈະເປັນ
ປະຕິບັດເຖິງແມ່ນວ່າ -n ຖືກລະບຸໄວ້ໃນເສັ້ນຄໍາສັ່ງ.
ຄວາມເປັນໄປໄດ້ ວຽກງານ
ຕົວແປໃນ ເຮັດໃຫ້ ແມ່ນຄ້າຍຄືຕົວແປໃນແກະ, ແລະ, ໂດຍປະເພນີ, ປະກອບດ້ວຍທັງຫມົດ
ຕົວອັກສອນຕົວພິມໃຫຍ່. ຫ້າຕົວປະຕິບັດການທີ່ສາມາດຖືກນໍາໃຊ້ເພື່ອກໍານົດຄ່າໃຫ້ກັບຕົວແປແມ່ນ
ດັ່ງຕໍ່ໄປນີ້:
= ກໍານົດຄ່າໃຫ້ກັບຕົວແປ. ຄ່າໃດນຶ່ງກ່ອນໜ້ານັ້ນຖືກລົບລ້າງ.
+= ຕື່ມຂໍ້ມູນໃສ່ກັບຄ່າປັດຈຸບັນຂອງຕົວແປ.
?= ກໍານົດຄ່າໃຫ້ກັບຕົວແປຖ້າມັນບໍ່ໄດ້ຖືກກໍານົດໄວ້ແລ້ວ.
:= ມອບຫມາຍດ້ວຍການຂະຫຍາຍ, ie, ຂະຫຍາຍມູນຄ່າກ່ອນທີ່ຈະມອບຫມາຍໃຫ້ຕົວແປ.
ໂດຍປົກກະຕິ, ການຂະຫຍາຍບໍ່ໄດ້ເຮັດຈົນກ່ວາຕົວແປຖືກອ້າງອີງ.
!= ຂະຫຍາຍມູນຄ່າແລະສົ່ງມັນໄປຫາ shell ສໍາລັບການປະຕິບັດແລະມອບຫມາຍຜົນໄດ້ຮັບໃຫ້ກັບ the
ຕົວແປ. ແຖວໃໝ່ໃນຜົນໄດ້ຮັບຈະຖືກແທນທີ່ດ້ວຍຍະຫວ່າງ.
ຊ່ອງຫວ່າງໃດໆກ່ອນການມອບໝາຍ ມູນຄ່າ ຖືກໂຍກຍ້າຍ; ຖ້າຄ່າກຳລັງຖືກຕໍ່ທ້າຍ, a
ຊ່ອງຫວ່າງດຽວແມ່ນໃສ່ລະຫວ່າງເນື້ອຫາກ່ອນໜ້າຂອງຕົວແປ ແລະສ່ວນຕໍ່ທ້າຍ
ມູນຄ່າ.
ຕົວແປຖືກຂະຫຍາຍໂດຍອ້ອມຮອບຊື່ຕົວແປດ້ວຍວົງເລັບໂຄ້ງ ('{}') ຫຼື
ວົງເລັບ ('()') ແລະນຳໜ້າດ້ວຍເຄື່ອງໝາຍເງິນໂດລາ ('$'). ຖ້າຊື່ຕົວແປມີ
ມີພຽງແຕ່ຕົວອັກສອນດຽວ, ວົງເລັບຫຼືວົງເລັບອ້ອມຂ້າງແມ່ນບໍ່ຈໍາເປັນ. ສັ້ນກວ່ານີ້
ແບບຟອມແມ່ນບໍ່ແນະນໍາ.
ການທົດແທນຕົວແປເກີດຂຶ້ນສອງຄັ້ງທີ່ແຕກຕ່າງກັນ, ຂຶ້ນກັບບ່ອນທີ່ຕົວແປແມ່ນຢູ່
ໃຊ້. ຕົວແປໃນສາຍການເພິ່ງພາອາໄສແມ່ນຂະຫຍາຍອອກເມື່ອເສັ້ນຖືກອ່ານ. ຕົວແປໃນແກະ
ຄໍາສັ່ງຖືກຂະຫຍາຍເມື່ອຄໍາສັ່ງ shell ຖືກປະຕິບັດ.
ສີ່ຫ້ອງຮຽນທີ່ແຕກຕ່າງກັນຂອງຕົວແປ (ຕາມລໍາດັບທີ່ເພີ່ມຂຶ້ນ) ແມ່ນ:
ຕົວແປສະພາບແວດລ້ອມ
ຕົວແປທີ່ກໍານົດເປັນສ່ວນຫນຶ່ງຂອງ ເຮັດໃຫ້ສະພາບແວດລ້ອມຂອງ.
ຕົວແປທົ່ວໂລກ
ຕົວແປທີ່ກໍານົດຢູ່ໃນ makefile ຫຼືໃນ makefiles ລວມ.
ຕົວແປແຖວຄໍາສັ່ງ
ຕົວແປທີ່ກໍານົດເປັນສ່ວນຫນຶ່ງຂອງເສັ້ນຄໍາສັ່ງແລະຕົວແປທີ່ໄດ້ຮັບຈາກ
MAKEFLAGS ສະພາບແວດລ້ອມການປ່ຽນແປງຫຼື .ເຮັດທຸງ ເປົ້າຫມາຍ.
ຕົວແປທ້ອງຖິ່ນ
ຕົວແປທີ່ຖືກກໍານົດສະເພາະກັບເປົ້າຫມາຍທີ່ແນ່ນອນ.
ຖ້າຊື່ຂອງຕົວແປສະພາບແວດລ້ອມປາກົດຢູ່ໃນ makefile ຢູ່ເບື້ອງຊ້າຍຂອງ an
ການມອບຫມາຍ, ຕົວແປທົ່ວໂລກທີ່ມີຊື່ດຽວກັນຖືກສ້າງຂື້ນ, ແລະອັນສຸດທ້າຍແມ່ນເງົາ
ອະດີດຕາມລໍາດັບຂອງພີ່ນ້ອງຂອງພວກເຂົາ. ສະພາບແວດລ້ອມບໍ່ໄດ້ປ່ຽນແປງໃນກໍລະນີນີ້, ແລະ
ການປ່ຽນແປງບໍ່ໄດ້ຖືກສົ່ງອອກໄປຫາບັນດາໂຄງການທີ່ປະຕິບັດໂດຍ ເຮັດໃຫ້. ຢ່າງໃດກໍຕາມ, ຕົວແປຂອງເສັ້ນຄໍາສັ່ງ
ຕົວຈິງແລ້ວປ່ຽນແທນຕົວແປສະພາບແວດລ້ອມຂອງຊື່ດຽວກັນຖ້າມີອັນສຸດທ້າຍ, ເຊິ່ງແມ່ນ
ເຫັນໄດ້ໃນໂຄງການເດັກນ້ອຍ.
ມີເຈັດຕົວແປທ້ອງຖິ່ນຢູ່ໃນ ເຮັດໃຫ້:
.ALLSRC ບັນຊີລາຍຊື່ຂອງແຫຼ່ງທັງຫມົດສໍາລັບເປົ້າຫມາຍນີ້; ທີ່ຮູ້ຈັກຍັງເປັນ '>'.
.ຮວບຮວມ ຊື່ຂອງແຟ້ມຮວບຮວມ; ທີ່ຮູ້ຈັກຍັງເປັນ '!'.
.IMPSRC ຊື່/ເສັ້ນທາງຂອງແຫຼ່ງທີ່ເປົ້າໝາຍຈະຖືກປ່ຽນ (the
ແຫຼ່ງ “ບົ່ງບອກ”); ທີ່ຮູ້ຈັກຍັງເປັນ '<'.
.ສະມາຊິກ ຊື່ຂອງສະມາຊິກຮວບຮວມ; ທີ່ຮູ້ຈັກຍັງເປັນ '%'.
.OODATE ບັນຊີລາຍຊື່ຂອງແຫຼ່ງຂໍ້ມູນສໍາລັບເປົ້າຫມາຍນີ້ທີ່ຖືກຖືວ່າລ້າສະໄຫມ; ເອີ້ນກັນວ່າ
'?'.
.PREFIX ຄໍານໍາຫນ້າຂອງໄຟລ໌, ປະກອບມີພຽງແຕ່ສ່ວນຂອງໄຟລ໌, ບໍ່ມີຄໍາຕໍ່ທ້າຍຫຼື
ອົງປະກອບໄດເລກະທໍລີກ່ອນຫນ້າ; ທີ່ຮູ້ຈັກຍັງເປັນ '*'.
.ເປົ້າຫມາຍ ຊື່ຂອງເປົ້າຫມາຍ; ທີ່ຮູ້ຈັກຍັງເປັນ '@'.
ຮູບແບບສັ້ນກວ່າ '@','!','<','%','?','>', ແລະ'*' ໄດ້ຖືກອະນຸຍາດໃຫ້ກັບຄືນ
ຄວາມເຂົ້າກັນໄດ້ແລະບໍ່ແນະນໍາ. ຫົກຕົວແປ '@F','@D','<F','<D','*F', ແລະ
'*D' ແມ່ນອະນຸຍາດໃຫ້ເຂົ້າກັນໄດ້ກັບ AT&T System V UNIX makefiles ແລະບໍ່ແມ່ນ
ແນະນໍາໃຫ້.
ສີ່ຂອງຕົວແປທ້ອງຖິ່ນອາດຈະຖືກນໍາໃຊ້ໃນແຫຼ່ງຂໍ້ມູນກ່ຽວກັບສາຍການເພິ່ງພາອາໄສເພາະວ່າພວກມັນຂະຫຍາຍ
ກັບມູນຄ່າທີ່ເຫມາະສົມສໍາລັບແຕ່ລະເປົ້າຫມາຍໃນເສັ້ນ. ຕົວແປເຫຼົ່ານີ້ແມ່ນ .ເປົ້າຫມາຍ, .PREFIX,
.ຮວບຮວມ, ແລະ .ສະມາຊິກ.
ເພີ່ມເຕີມ, ເຮັດໃຫ້ ກໍານົດຫຼືຮູ້ກ່ຽວກັບຕົວແປພາຍໃນຫຼືສະພາບແວດລ້ອມຕໍ່ໄປນີ້
ຕົວແປ:
$ ສັນຍາລັກໂດລາດຽວ '$', ie '$$' ຂະຫຍາຍເປັນສັນຍາລັກໂດລາດຽວ.
ເຮັດ ຊື່ນັ້ນ ເຮັດໃຫ້ ຖືກປະຕິບັດດ້ວຍ (argv[0]).
.CURDI ເສັ້ນທາງໄປຫາໄດເລກະທໍລີທີ່ ເຮັດໃຫ້ ໄດ້ຖືກປະຕິບັດ. ໄດ້ ເຮັດໃຫ້ ຊຸດເຄື່ອງໃຊ້
.CURDI ກັບເສັ້ນທາງ canonical ມອບໃຫ້ໂດຍ getcwd(3).
.OBJDIR ເສັ້ນທາງໄປຫາໄດເລກະທໍລີທີ່ເປົ້າຫມາຍຖືກສ້າງຂຶ້ນ. ໃນຕອນເລີ່ມຕົ້ນ, ເຮັດໃຫ້
ຄົ້ນຫາໄດເລກະທໍລີສຳຮອງເພື່ອວາງໄຟລ໌ເປົ້າໝາຍ. ມັນຈະພະຍາຍາມ
ເພື່ອປ່ຽນເຂົ້າໄປໃນໄດເລກະທໍລີພິເສດນີ້ແລະຈະຄົ້ນຫາໄດເລກະທໍລີນີ້ສໍາລັບ
ບໍ່ພົບ makefiles ໃນໄດເລກະທໍລີປະຈຸບັນ. ໄດເລກະທໍລີຕໍ່ໄປນີ້ແມ່ນ
ພະຍາຍາມໃນຄໍາສັ່ງ:
1. ${MAKEOBJDIRPREFIX}/`pwd -P`
2. ${MAKEOBJDIR}
3. obj.${MACHINE}
4. obj
5. /usr/obj/`pwd -P`
ໄດເລກະທໍລີທໍາອິດທີ່ ເຮັດໃຫ້ ສົບຜົນສໍາເລັດການປ່ຽນແປງເຂົ້າໄປໃນຖືກນໍາໃຊ້. ຖ້າຢ່າງນັ້ນ
MAKEOBJDIRPREFIX ຫຼື MAKEOBJDIR ຖືກກໍານົດໄວ້ໃນສະພາບແວດລ້ອມແຕ່ ເຮັດໃຫ້ ບໍ່ສາມາດ
ເພື່ອປ່ຽນເຂົ້າໄປໃນໄດເລກະທໍລີທີ່ສອດຄ້ອງກັນ, ຫຼັງຈາກນັ້ນໄດເລກະທໍລີປະຈຸບັນແມ່ນ
ໃຊ້ໂດຍບໍ່ໄດ້ກວດເບິ່ງສ່ວນທີ່ເຫຼືອຂອງບັນຊີລາຍຊື່. ຖ້າພວກເຂົາບໍ່ໄດ້ກໍານົດແລະ
ເຮັດໃຫ້ ບໍ່ສາມາດປ່ຽນເຂົ້າໄປໃນບັນຊີສາມອັນທີ່ຍັງເຫຼືອ, ຈາກນັ້ນ
ໄດເລກະທໍລີປະຈຸບັນຖືກນໍາໃຊ້. ຫມາຍເຫດ, ວ່າ MAKEOBJDIRPREFIX ແລະ MAKEOBJDIR
ຕ້ອງເປັນຕົວແປສະພາບແວດລ້ອມ ແລະບໍ່ຄວນຕັ້ງ ເຮັດໃຫ້ເສັ້ນຄໍາສັ່ງຂອງ.
ໄດ້ ເຮັດໃຫ້ ຊຸດເຄື່ອງໃຊ້ .OBJDIR ກັບເສັ້ນທາງ canonical ມອບໃຫ້ໂດຍ getcwd(3).
.MAKEFILE_LIST As ເຮັດໃຫ້ ອ່ານ makefiles ຕ່າງໆ, ລວມທັງໄຟລ໌ເລີ່ມຕົ້ນແລະໃດໆ
ໄດ້ມາຈາກບັນຊີຄໍາສັ່ງແລະ .ລວມທັງ ແລະ .ຮວມ ຄໍາແນະນໍາ, ຂອງເຂົາເຈົ້າ
ຊື່ຈະຖືກຕໍ່ທ້າຍອັດຕະໂນມັດກັບ .MAKEFILE_LIST ຕົວແປ. ເຂົາເຈົ້າ
ຖືກເພີ່ມເຂົ້າກ່ອນ ເຮັດໃຫ້ ເລີ່ມ parse ໃຫ້ເຂົາເຈົ້າ, ດັ່ງນັ້ນຊື່ຂອງ
makefile ປັດຈຸບັນແມ່ນຄໍາສຸດທ້າຍໃນຕົວແປນີ້.
MAKEFLAGS ສະພາບແວດລ້ອມທີ່ປ່ຽນແປງໄດ້ MAKEFLAGS ໃນເບື້ອງຕົ້ນອາດຈະມີສິ່ງໃດແດ່ທີ່ອາດຈະ
ໄດ້ລະບຸໄວ້ໃນ ເຮັດໃຫ້ເສັ້ນຄໍາສັ່ງຂອງ, ລວມທັງ -f ທາງເລືອກ. ຫຼັງຈາກ
ການປຸງແຕ່ງ, ເນື້ອໃນຂອງມັນຖືກເກັບໄວ້ໃນ .ເຮັດທຸງ ຕົວປ່ຽນແປງທົ່ວໂລກ,
ເຖິງແມ່ນວ່າໃດໆ -f ທາງເລືອກແມ່ນຖືກຍົກເວັ້ນ. ຫຼັງຈາກນັ້ນ, ທາງເລືອກທັງຫມົດແລະຕົວແປ
ການມອບຫມາຍທີ່ລະບຸໄວ້ໃນ ເຮັດໃຫ້ເສັ້ນຄໍາສັ່ງຂອງ, ຍົກເວັ້ນ -f, ຖືກຕໍ່ທ້າຍກັບ
ໄດ້ .ເຮັດທຸງ ຕົວແປ.
ເມື່ອໃດກໍ່ຕາມ ເຮັດໃຫ້ ປະຕິບັດໂຄງການ, ມັນກໍານົດ MAKEFLAGS ໃນໂຄງການ
ສິ່ງແວດລ້ອມກັບມູນຄ່າປະຈຸບັນຂອງ .ເຮັດທຸງ ຕົວແປທົ່ວໂລກ. ດັ່ງນັ້ນ,
ຖ້າ MAKEFLAGS ໃນ ເຮັດໃຫ້ສະພາບແວດລ້ອມຂອງປະກອບດ້ວຍອັນໃດນຶ່ງ -f ທາງເລືອກ, ພວກເຂົາເຈົ້າຈະບໍ່ເປັນ
ຍູ້ລົງໄປຫາໂຄງການເດັກນ້ອຍໂດຍອັດຕະໂນມັດ. ໄດ້ ເຮັດໃຫ້ ປະໂຫຍດຢ່າງມີປະສິດທິພາບ
ການກັ່ນຕອງອອກ -f ທາງເລືອກຈາກສະພາບແວດລ້ອມແລະເສັ້ນຄໍາສັ່ງເຖິງແມ່ນວ່າມັນ
ຜ່ານສ່ວນທີ່ເຫຼືອຂອງທາງເລືອກຂອງມັນລົງໄປຫາການຍ່ອຍໂດຍຜ່ານ MAKEFLAGS ໂດຍຄ່າເລີ່ມຕົ້ນ.
ເມື່ອຜ່ານຄໍານິຍາມ macro ແລະການໂຕ້ຖຽງທຸງໃນ MAKEFLAGS
ຕົວແປສະພາບແວດລ້ອມ, ຊ່ອງຫວ່າງ ແລະຕົວອັກສອນແຖບຖືກອ້າງອີງໂດຍການນຳໜ້າພວກມັນ
ກັບ backslash ເປັນ. ເມື່ອອ່ານຕົວແປ MAKEFLAGS ຈາກສະພາບແວດລ້ອມ,
ລໍາດັບທັງຫມົດຂອງ backslash ແລະຫນຶ່ງໃນຊ່ອງຫຼືແຖບຖືກແທນທີ່ພຽງແຕ່
ລັກສະນະທີສອງຂອງພວກເຂົາໂດຍບໍ່ມີການເຮັດໃຫ້ຄໍາສັບແຕກ. ເຫດການອື່ນໆ
ຂອງ backslash ແມ່ນເກັບຮັກສາໄວ້. ກຸ່ມຂອງພື້ນທີ່ທີ່ບໍ່ໄດ້ອ້າງອີງ, ແຖບ ແລະແຖວໃໝ່
ຕົວອັກສອນເຮັດໃຫ້ເກີດການທໍາລາຍຄໍາສັບ.
.ເຮັດທຸງ ໃນເບື້ອງຕົ້ນ, ຕົວແປທົ່ວໂລກນີ້ມີ ເຮັດໃຫ້ຕົວເລືອກເວລາແລ່ນໃນປະຈຸບັນ
ຈາກສະພາບແວດລ້ອມແລະເສັ້ນຄໍາສັ່ງດັ່ງທີ່ອະທິບາຍຂ້າງເທິງ, ພາຍໃຕ້ MAKEFLAGS.
ໂດຍການປັບປຸງເນື້ອໃນຂອງ .ເຮັດທຸງ ຕົວແປທົ່ວໂລກ, makefile
ສາມາດປ່ຽນແປງເນື້ອໃນຂອງຕົວແປສະພາບແວດລ້ອມ MAKEFLAGS ທີ່ມີໃຫ້
ສໍາລັບໂຄງການທັງຫມົດທີ່ ເຮັດໃຫ້ ປະຕິບັດ. ນີ້ລວມມີການເພີ່ມ -f ທາງເລືອກ.
ມູນຄ່າປັດຈຸບັນຂອງ .ເຮັດທຸງ ແມ່ນພຽງແຕ່ຄັດລອກ verbatim ກັບ MAKEFLAGS ໃນ
ສະພາບແວດລ້ອມຂອງໂຄງການເດັກ.
ຈົ່ງຈື່ໄວ້ວ່າທາງເລືອກໃດໆທີ່ເຂົ້າມາ .ເຮັດທຸງ ທັງບໍ່ມີຜົນກະທົບໃນປັດຈຸບັນ
ຕົວຢ່າງຂອງ ເຮັດໃຫ້ ຫຼືສະແດງຢູ່ໃນສໍາເນົາຂອງຕົນເອງຂອງ MAKEFLAGS ທັນທີ.
ຢ່າງໃດກໍຕາມ, ພວກມັນສະແດງຢູ່ໃນຕົວແປສະພາບແວດລ້ອມ MAKEFLAGS ຂອງໂຄງການ
ປະຕິບັດໂດຍ ເຮັດໃຫ້. ໃນທາງກົງກັນຂ້າມ, ການມອບຫມາຍໂດຍກົງກັບ MAKEFLAGS
ທັງບໍ່ມີຜົນກະທົບກັບຕົວຢ່າງໃນປະຈຸບັນຂອງ ເຮັດໃຫ້ ຫຼືບໍ່ໄດ້ຮັບການຜ່ານໄປ ເຮັດໃຫ້'s
ເດັກນ້ອຍ. ປຽບທຽບກັບ .ເຮັດທຸງ ເປົ້າຫມາຍພິເສດຂ້າງລຸ່ມນີ້.
MFLAGS ຕົວແປນີ້ໄດ້ຖືກສະຫນອງໃຫ້ສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບຄືນໄປບ່ອນແລະປະກອບດ້ວຍທັງຫມົດ
ທາງເລືອກຈາກຕົວແປສະພາບແວດລ້ອມ MAKEFLAGS ບວກກັບທາງເລືອກທີ່ລະບຸໄວ້
on ເຮັດໃຫ້ເສັ້ນຄໍາສັ່ງຂອງ.
.MAKE.PID process-id ຂອງ ເຮັດໃຫ້.
.MAKE.PPID ໄອດີຂະບວນການຫຼັກຂອງ ເຮັດໃຫ້.
.MAKE.JOB.PREFIX
If ເຮັດໃຫ້ ແມ່ນດໍາເນີນການກັບ -j -v ຫຼັງຈາກນັ້ນ, ຜົນຜະລິດສໍາລັບແຕ່ລະເປົ້າຫມາຍແມ່ນ prefixed ກັບ a
token '--- ເປົ້າຫມາຍ --- ' ພາກສ່ວນທໍາອິດທີ່ສາມາດຄວບຄຸມໄດ້ໂດຍຜ່ານ
.MAKE.JOB.PREFIX.
ຕົວຢ່າງ: .MAKE.JOB.PREFIX=${.newline}---${MAKE:T}[${.MAKE.PID}] ຈະ
ຜະລິດ tokens ເຊັ່ນ '---make[1234] ເປົ້າຫມາຍ ---' ຫຼື
.MAKE.JOB.PREFIX=---pid[${.MAKE.PID}],ppid[${.MAKE.PPID}] ຈະຜະລິດ
tokens ເຊັ່ນ '---pid[56789],ppid[1234] ເປົ້າຫມາຍ ---' ເຮັດໃຫ້ມັນງ່າຍຕໍ່ການຕິດຕາມ
ລະດັບຂອງຂະຫນານໄດ້ຖືກບັນລຸໄດ້.
.ເປົ້າໝາຍ ລາຍຊື່ເປົ້າໝາຍ ເຮັດໃຫ້ ປະຈຸບັນກໍາລັງກໍ່ສ້າງ.
.ຮວມ ເບິ່ງ .ຮວມ ເປົ້າຫມາຍພິເສດ.
.LIBS ເບິ່ງ .LIBS ເປົ້າຫມາຍພິເສດ.
ເຄື່ອງຈັກ ຊື່ຂອງສະຖາປັດຕະເຄື່ອງຈັກ ເຮັດໃຫ້ ແມ່ນແລ່ນສຸດ, ໄດ້ມາຈາກ
ສະພາບແວດລ້ອມເຄື່ອງຈັກປ່ຽນແປງໄດ້, ຫຼືຜ່ານ ບໍ່ມີຊື່ສຽງ(3) ຖ້າບໍ່ໄດ້ກໍານົດ.
MACHINE_ARCH ຊື່ຂອງສະຖາປັດຕະເຄື່ອງຈັກ ເຮັດໃຫ້ ໄດ້ຖືກລວບລວມສໍາລັບ, ກໍານົດຢູ່ທີ່
ເວລາລວບລວມ.
VPATH Makefiles ອາດຈະກໍານົດບັນຊີລາຍຊື່ທີ່ຂັ້ນດ້ວຍຈໍ້າສອງເມັດຂອງໄດເລກະທໍລີໃຫ້ VPATH. ເຫຼົ່ານີ້
ໄດເລກະທໍລີຈະຖືກຄົ້ນຫາສໍາລັບໄຟລ໌ແຫຼ່ງໂດຍ ເຮັດໃຫ້ ຫຼັງຈາກທີ່ມັນສໍາເລັດ
parsing makefiles ການປ້ອນຂໍ້ມູນທັງຫມົດ.
ການປ່ຽນແປງ ຕົວປ່ຽນແປງ
ການຂະຫຍາຍຕົວແປອາດຈະຖືກດັດແປງເພື່ອເລືອກຫຼືດັດແປງແຕ່ລະຄໍາຂອງຕົວແປ (ບ່ອນທີ່ a
“ຄຳ” ແມ່ນລຳດັບຕົວອັກສອນທີ່ຂັ້ນດ້ວຍຊ່ອງຫວ່າງ). ຮູບແບບທົ່ວໄປຂອງຕົວແປ
ການຂະຫຍາຍຕົວແມ່ນດັ່ງຕໍ່ໄປນີ້:
{variable[:modifier[:...]]}
ແຕ່ລະຕົວແກ້ໄຂເລີ່ມຕົ້ນດ້ວຍຈໍ້າສອງເມັດ ແລະໜຶ່ງໃນລັກສະນະພິເສດຕໍ່ໄປນີ້. ຈໍ້າສອງເມັດ
ອາດຈະຖືກຫລົບຫນີດ້ວຍ backslash ('\').
:C/ຮູບແບບ/ການທົດແທນ/[1g]
ແກ້ໄຂແຕ່ລະຄໍາຂອງມູນຄ່າ, ທົດແທນທຸກໆຄໍາທີ່ກົງກັນຂອງຄໍາທີ່ຂະຫຍາຍອອກເປັນປະຈໍາ
ການສະແດງອອກ ຮູບແບບ (ເບິ່ງ re_format(7)) ກັບ ed(1) ແບບ ການທົດແທນ string
ໂດຍປົກກະຕິ, ການປະກົດຕົວຄັ້ງທໍາອິດຂອງຮູບແບບໃນແຕ່ລະຄໍາຂອງມູນຄ່າແມ່ນ
ປ່ຽນແປງ. ຕົວແກ້ໄຂ '1' ເຮັດໃຫ້ການປ່ຽນແທນທີ່ນຳໃຊ້ກັບຫຼາຍສຸດໜຶ່ງຄຳ;
ຕົວແກ້ໄຂ 'g' ເຮັດໃຫ້ການທົດແທນນໍາໃຊ້ກັບຫຼາຍຕົວຢ່າງຂອງ
ຮູບແບບການຄົ້ນຫາທີ່ເກີດຂຶ້ນໃນຄໍາສັບຕ່າງໆຫຼືຄໍາທີ່ມັນໄດ້ຖືກພົບເຫັນຢູ່ໃນ. ໃຫ້ສັງເກດວ່າ '1' ແລະ
'g' ແມ່ນ orthogonal; ອະດີດກໍານົດວ່າຫຼາຍຄໍາແມ່ນມີທ່າແຮງ
ຜົນກະທົບ, ສຸດທ້າຍບໍ່ວ່າຈະເປັນການທົດແທນຫຼາຍສາມາດເກີດຂຶ້ນພາຍໃນ
ແຕ່ລະຄໍາທີ່ໄດ້ຮັບຜົນກະທົບ.
:E ປ່ຽນແທນແຕ່ລະຄຳໃນຕົວແປດ້ວຍຄຳຕໍ່ທ້າຍຂອງມັນ.
:H ແທນທີ່ແຕ່ລະຄໍາໃນຕົວແປດ້ວຍທຸກສິ່ງທຸກຢ່າງແຕ່ອົງປະກອບສຸດທ້າຍ.
:L ປ່ຽນຕົວແປເປັນຕົວພິມນ້ອຍ. (ເຊົາຮອງຮັບ)
:Mຮູບແບບ ເລືອກພຽງແຕ່ຄໍາທີ່ກົງກັບສ່ວນທີ່ເຫຼືອຂອງຕົວແກ້ໄຂ. ແກະມາດຕະຖານ
ອາດໃຊ້ຕົວອັກສອນແທນ ('*', '?', ແລະ '[]'). ຕົວອັກສອນແທນຕົວ
ອາດຈະຖືກຫລົບຫນີດ້ວຍ backslash ('\').
:Nຮູບແບບ ນີ້ແມ່ນຄືກັນກັບ :M, ແຕ່ເລືອກທຸກຄໍາທີ່ບໍ່ກົງກັບສ່ວນທີ່ເຫຼືອຂອງ
ຕົວປັບປຸງແກ້ໄຂ.
:O ສັ່ງທຸກຄຳສັບໃນຕົວແປຕາມຕົວອັກສອນ.
:Q ອ້າງເຖິງທຸກໆຕົວແປ meta ຂອງແກະໃນຕົວແປ, ເພື່ອໃຫ້ສາມາດຜ່ານໄດ້
ຢ່າງປອດໄພໂດຍຜ່ານ invocations recursive ຂອງ ເຮັດໃຫ້.
:R ແທນທີ່ແຕ່ລະຄໍາທີ່ຢູ່ໃນຕົວແປດ້ວຍທຸກສິ່ງທຸກຢ່າງແຕ່ຄໍາຕໍ່ທ້າຍຂອງມັນ.
:S/old_string/new_string/[g]
ປັບປຸງແກ້ໄຂການປະກົດຕົວຄັ້ງທໍາອິດຂອງ old_string ໃນແຕ່ລະຄໍາຂອງຄ່າຂອງຕົວແປ,
ແທນທີ່ມັນ new_string. ຖ້າ 'g' ຖືກຕໍ່ທ້າຍກັບເຄື່ອງໝາຍສຸດທ້າຍຂອງ
ຮູບແບບ, ການປະກົດຕົວທັງຫມົດໃນແຕ່ລະຄໍາຖືກແທນທີ່. ຖ້າ old_string ເລີ່ມຕົ້ນດ້ວຍ
cart ('^'), old_string ຖືກຍຶດໄວ້ໃນຕອນຕົ້ນຂອງແຕ່ລະຄໍາ. ຖ້າ
old_string ສິ້ນສຸດດ້ວຍເຄື່ອງຫມາຍເງິນໂດລາ ('$'), ມັນຖືກຍຶດຢູ່ໃນຕອນທ້າຍຂອງແຕ່ລະ
ຄໍາ. ພາຍໃນ new_string, ampersand ('&') ຖືກແທນທີ່ດ້ວຍ old_stringທີ່ຢູ່ ທຸກໆຢ່າງ
ຕົວອັກສອນອາດຈະຖືກໃຊ້ເປັນຕົວຂັ້ນສໍາລັບສ່ວນຕ່າງໆຂອງສະຕຣິງຕົວແກ້ໄຂ. ໄດ້
ຕົວອັກສອນສະມໍ, ຕົວຫຍໍ້, ແລະຕົວຂັ້ນອາດຈະຖືກຫລົບຫນີດ້ວຍ backslash
('\').
ການຂະຫຍາຍຕົວແປເກີດຂື້ນໃນແບບປົກກະຕິພາຍໃນທັງສອງ old_string ແລະ
new_string ມີຂໍ້ຍົກເວັ້ນດຽວທີ່ backslash ຖືກນໍາໃຊ້ເພື່ອປ້ອງກັນ
ການຂະຫຍາຍຕົວຂອງເຄື່ອງຫມາຍເງິນໂດລາ ('$'), ບໍ່ແມ່ນເຄື່ອງຫມາຍເງິນໂດລາກ່ອນຫນ້າຕາມປົກກະຕິ.
:old_string=new_string
ນີ້ແມ່ນຕົວປ່ຽນແບບຂອງ AT&T System V UNIX. ມັນຕ້ອງເປັນອັນສຸດທ້າຍ
ຕົວແກ້ໄຂທີ່ລະບຸໄວ້. ຖ້າ old_string or new_string ບໍ່ມີຮູບແບບ
ລັກສະນະທີ່ກົງກັນ % ຫຼັງຈາກນັ້ນ, ມັນສົມມຸດວ່າພວກເຂົາເຈົ້າແມ່ນສະມໍຢູ່ໃນຕອນທ້າຍຂອງ
ແຕ່ລະຄໍາ, ດັ່ງນັ້ນພຽງແຕ່ຄໍາຕໍ່ທ້າຍຫຼືຄໍາທັງຫມົດອາດຈະຖືກແທນທີ່. ຖ້າບໍ່ດັ່ງນັ້ນ % ເປັນ
ສາຍຍ່ອຍຂອງ old_string ຈະຖືກທົດແທນໃນ new_string.
:T ແທນທີ່ແຕ່ລະຄໍາໃນຕົວແປດ້ວຍອົງປະກອບສຸດທ້າຍຂອງມັນ.
:tl ປ່ຽນຕົວແປເປັນຕົວພິມນ້ອຍ.
:tu ປ່ຽນຕົວແປເປັນຕົວພິມໃຫຍ່.
:U ປ່ຽນຕົວແປເປັນຕົວພິມໃຫຍ່. (ເຊົາຮອງຮັບ)
:u ເອົາຄໍາທີ່ຊໍ້າກັນທີ່ຢູ່ຕິດກັນອອກ (ເຊັ່ນ: ເປັນເອກະລັກ(1)).
ຄຳແນະນຳ, ເງື່ອນໄຂ, ແລະ FOR ໂລບ
ຄໍາສັ່ງ, ເງື່ອນໄຂ, ແລະສໍາລັບ loops reminiscent ຂອງພາສາການຂຽນໂປລແກລມ C ແມ່ນ
ສະຫນອງໃຫ້ໃນ ເຮັດໃຫ້. ໂຄງສ້າງດັ່ງກ່າວທັງຫມົດແມ່ນຖືກກໍານົດໂດຍເສັ້ນເລີ່ມຕົ້ນດ້ວຍຈຸດດຽວ
('.') ລັກສະນະ. ຄໍາແນະນໍາຕໍ່ໄປນີ້ແມ່ນສະຫນັບສະຫນູນ:
.ລວມທັງ
.ລວມທັງ "ແຟ້ມ"
ລວມເອົາ makefile ທີ່ລະບຸໄວ້. ຕົວແປລະຫວ່າງວົງເລັບມຸມຫຼືສອງເທົ່າ
ວົງຢືມຖືກຂະຫຍາຍອອກເປັນຊື່ໄຟລ໌. ຖ້າໃຊ້ວົງເລັບມຸມ, ລວມມີ
makefile ຄາດວ່າຈະຢູ່ໃນລະບົບ makefile directory. ຖ້າວົງຢືມສອງເທົ່າ
ໃຊ້, ລວມທັງໄດເລກະທໍລີ makefile ແລະໄດເລກະທໍລີໃດໆທີ່ລະບຸໂດຍໃຊ້ -I
ທາງເລືອກແມ່ນຊອກຫາກ່ອນລະບົບ makefile directory.
.ຮວມ
.ຮວມ "ແຟ້ມ"
ຄື .ລວມທັງ, ແຕ່ຖືກລະເລີຍຢ່າງງຽບໆຖ້າໄຟລ໌ບໍ່ສາມາດຊອກຫາ ແລະເປີດໄດ້.
.undef ຕົວແປ
ຍົກເລີກການກຳນົດຕົວແປທົ່ວໂລກທີ່ລະບຸໄວ້. ມີພຽງແຕ່ຕົວແປທົ່ວໂລກເທົ່ານັ້ນທີ່ບໍ່ສາມາດກໍານົດໄດ້.
.ຜິດພາດ ຂໍ້ຄວາມ
ຢຸດການປະມວນຜົນ makefile ທັນທີ. ຊື່ໄຟລ໌ຂອງ makefile, ໄດ້
ແຖວທີ່ພົບຂໍ້ຜິດພາດ ແລະຂໍ້ຄວາມທີ່ລະບຸໄວ້ຈະຖືກພິມໃສ່
ຜົນຜະລິດຄວາມຜິດພາດມາດຕະຖານແລະ ເຮັດໃຫ້ ສິ້ນສຸດດ້ວຍລະຫັດອອກ 1. ຕົວແປໃນ
ຂໍ້ຄວາມຖືກຂະຫຍາຍ.
.ຄໍາເຕືອນ ຂໍ້ຄວາມ
ສົ່ງຂໍ້ຄວາມເຕືອນ. ຊື່ໄຟລ໌ຂອງ makefile, ແຖວທີ່ຄໍາເຕືອນ
ໄດ້ພົບ, ແລະຂໍ້ຄວາມທີ່ລະບຸໄວ້ຈະຖືກພິມອອກເປັນມາດຕະຖານຄວາມຜິດພາດ.
ຕົວແປໃນຂໍ້ຄວາມຖືກຂະຫຍາຍ.
ເງື່ອນໄຂຖືກນໍາໃຊ້ເພື່ອກໍານົດວ່າພາກສ່ວນໃດຂອງ Makefile ທີ່ຈະດໍາເນີນການ. ພວກເຂົາຖືກນໍາໃຊ້
ຄ້າຍຄືກັນກັບເງື່ອນໄຂທີ່ສະຫນັບສະຫນູນໂດຍ C pre-processor. ເງື່ອນໄຂຕໍ່ໄປນີ້
ສະ ໜັບ ສະ ໜູນ:
.ຖ້າ [!]ການສະແດງອອກ [ປະຕິບັດການ ການສະແດງອອກ ...]
ທົດສອບມູນຄ່າຂອງການສະແດງຜົນ.
.ifdef [!]ຕົວແປ [ປະຕິບັດການ ຕົວແປ ...]
ທົດສອບຄ່າຂອງຕົວແປ.
.ifndef [!]ຕົວແປ [ປະຕິບັດການ ຕົວແປ ...]
ທົດສອບຄ່າຂອງຕົວແປ.
.ifmake [!]ເປົ້າຫມາຍ [ປະຕິບັດການ ເປົ້າຫມາຍ ...]
ທົດສອບເປົ້າຫມາຍທີ່ຖືກສ້າງຂຶ້ນ.
.ifnmake [!]ເປົ້າຫມາຍ [ປະຕິບັດການ ເປົ້າຫມາຍ ...]
ທົດສອບເປົ້າຫມາຍທີ່ຖືກສ້າງຂຶ້ນ.
.ອື່ນ ປີ້ນກັບຄວາມຮູ້ສຶກຂອງເງື່ອນໄຂສຸດທ້າຍ.
.elif [!]ການສະແດງອອກ [ປະຕິບັດການ ການສະແດງອອກ ...]
ປະສົມປະສານຂອງ .ອື່ນ ປະຕິບັດຕາມໂດຍ .ຖ້າ.
.elifdef [!]ຕົວແປ [ປະຕິບັດການ ຕົວແປ ...]
ປະສົມປະສານຂອງ .ອື່ນ ປະຕິບັດຕາມໂດຍ .ifdef.
.elifndef [!]ຕົວແປ [ປະຕິບັດການ ຕົວແປ ...]
ປະສົມປະສານຂອງ .ອື່ນ ປະຕິບັດຕາມໂດຍ .ifndef.
.elifmake [!]ເປົ້າຫມາຍ [ປະຕິບັດການ ເປົ້າຫມາຍ ...]
ປະສົມປະສານຂອງ .ອື່ນ ປະຕິບັດຕາມໂດຍ .ifmake.
.elifnmake [!]ເປົ້າຫມາຍ [ປະຕິບັດການ ເປົ້າຫມາຍ ...]
ປະສົມປະສານຂອງ .ອື່ນ ປະຕິບັດຕາມໂດຍ .ifnmake.
.endif ສິ້ນສຸດຮ່າງກາຍຂອງເງື່ອນໄຂ.
ໄດ້ ປະຕິບັດການ ອາດຈະເປັນອັນໃດອັນໜຶ່ງຕໍ່ໄປນີ້:
|| ມີເຫດຜົນ OR
&& ເຫດຜົນ AND; ເໜືອກວ່າ '||'.
ເຊັ່ນດຽວກັບ C, ເຮັດໃຫ້ ພຽງແຕ່ຈະປະເມີນເງື່ອນໄຂເທົ່າທີ່ມີຄວາມຈໍາເປັນເພື່ອກໍານົດມັນ
ຄ່າ. ວົງເລັບອາດຈະຖືກໃຊ້ເພື່ອປ່ຽນລຳດັບການປະເມີນ. ຕົວປະຕິບັດການ boolean '!'
ອາດຈະຖືກໃຊ້ເພື່ອປະຕິເສດຢ່າງມີເຫດຜົນຕາມເງື່ອນໄຂທັງໝົດ. ມັນເປັນອັນດັບສູງກ່ວາ
'&&'.
ມູນຄ່າຂອງ ການສະແດງອອກ ອາດຈະເປັນອັນໃດອັນໜຶ່ງຕໍ່ໄປນີ້:
ກໍານົດໄວ້ ເອົາຊື່ຕົວແປເປັນ argument ແລະປະເມີນເປັນ true ຖ້າຕົວແປມີ
ໄດ້ຖືກກໍານົດ.
ເຮັດໃຫ້ ເອົາຊື່ເປົ້າຫມາຍເປັນການໂຕ້ຖຽງແລະປະເມີນວ່າເປັນຄວາມຈິງຖ້າເປົ້າຫມາຍແມ່ນ
ລະບຸເປັນສ່ວນຫນຶ່ງຂອງ ເຮັດໃຫ້ເສັ້ນຄໍາສັ່ງ ຫຼືຖືກປະກາດວ່າເປັນເປົ້າໝາຍເລີ່ມຕົ້ນ
(ທັງ implicitly ຫຼືຢ່າງຊັດເຈນ, ເບິ່ງ .ຫຼັກ) ກ່ອນເສັ້ນທີ່ປະກອບດ້ວຍ
ເງື່ອນໄຂ.
ຫວ່າງເປົ່າ ເອົາຕົວແປ, ທີ່ມີຕົວແກ້ໄຂທີ່ເປັນໄປໄດ້, ແລະປະເມີນວ່າເປັນຄວາມຈິງຖ້າຫາກວ່າ
ການຂະຫຍາຍຕົວຂອງຕົວແປຈະສົ່ງຜົນໃຫ້ string ຫວ່າງເປົ່າ.
ຢູ່ ເອົາຊື່ໄຟລ໌ເປັນ argument ແລະປະເມີນເປັນ true ຖ້າໄຟລ໌ມີຢູ່. ໄດ້
ໄຟລ໌ຖືກຄົ້ນຫາຢູ່ໃນເສັ້ນທາງຄົ້ນຫາລະບົບ (ເບິ່ງ .PATH).
ເປົ້າຫມາຍ ເອົາຊື່ເປົ້າຫມາຍເປັນການໂຕ້ຖຽງແລະປະເມີນວ່າເປັນຄວາມຈິງຖ້າເປົ້າຫມາຍດັ່ງກ່າວ
ກໍານົດ.
An ການສະແດງອອກ ອາດເປັນການປຽບທຽບຕົວເລກ ຫຼືສະຕຣິງ: ໃນກໍລະນີນີ້, ດ້ານຊ້າຍມື
ຕ້ອງ be ການຂະຫຍາຍຕົວແປ, ໃນຂະນະທີ່ດ້ານຂວາມືສາມາດເປັນຄ່າຄົງທີ່ຫຼືຕົວແປ
ການຂະຫຍາຍຕົວ. ການຂະຫຍາຍຕົວແປແມ່ນປະຕິບັດທັງສອງດ້ານ, ຫຼັງຈາກນັ້ນມູນຄ່າຜົນໄດ້ຮັບ
ຖືກປຽບທຽບ. ຄ່າຖືກຕີຄວາມໝາຍເປັນເລກຖານສິບຫົກ ຖ້າມັນຖືກນຳໜ້າດ້ວຍ 0x, ຖ້າບໍ່ດັ່ງນັ້ນ
ເປັນທົດສະນິຍົມ; ບໍ່ຮອງຮັບເລກຖານແປດ.
ການປຽບທຽບສະຕຣິງສາມາດໃຊ້ໄດ້ພຽງແຕ່ '=='ຫຼື'!=' operators, ໃນຂະນະທີ່ຄ່າຕົວເລກ (ທັງສອງ
integer ແລະຈຸດລອຍ) ຍັງສາມາດປຽບທຽບໄດ້ໂດຍໃຊ້ '>','>=','<'ແລະ'<='
ຜູ້ປະກອບການ.
ຖ້າບໍ່ມີຕົວປະຕິບັດການທີ່ກ່ຽວຂ້ອງ (ແລະຄ່າຂວາມື) ຖືກມອບໃຫ້, implicit '!= 0' ຖືກນໍາໃຊ້.
ຢ່າງໃດກໍຕາມ, ຄວນລະມັດລະວັງຫຼາຍໃນການນໍາໃຊ້ຄຸນນະສົມບັດນີ້ໂດຍສະເພາະໃນເວລາທີ່ຕົວແປຊ້າຍມື
ການຂະຫຍາຍສົ່ງຄືນສະຕຣິງ.
ເມື່ອໃດ ເຮັດໃຫ້ ກໍາລັງປະເມີນຫນຶ່ງໃນການສະແດງອອກທີ່ມີເງື່ອນໄຂເຫຼົ່ານີ້, ແລະມັນພົບກັບຄໍາທີ່ມັນ
ບໍ່ຮັບຮູ້, ບໍ່ວ່າຈະເປັນ "ເຮັດ" ຫຼື "ກໍານົດ" ການສະແດງອອກແມ່ນຖືກນໍາໃຊ້ກັບມັນ, ຂຶ້ນກັບ
ຮູບແບບຂອງເງື່ອນໄຂ. ຖ້າແບບຟອມແມ່ນ .ຖ້າ, .ifdef or .ifndef, "ກໍານົດ"
ການສະແດງອອກແມ່ນຖືກນໍາໃຊ້. ເຊັ່ນດຽວກັນ, ຖ້າຫາກວ່າແບບຟອມແມ່ນ .ifmake or .ifnmake, ການສະແດງອອກ "ເຮັດ".
ຖືກນໍາໃຊ້.
ຖ້າການປະເມີນເງື່ອນໄຂເປັນຄວາມຈິງ, ການແຍກວິເຄາະ makefile ຍັງສືບຕໍ່ຄືເກົ່າ. ຖ້າຫາກວ່າມັນ
ປະເມີນເປັນຜິດ, ແຖວຕໍ່ໄປນີ້ແມ່ນຂ້າມໄປ. ໃນທັງສອງກໍລະນີນີ້ສືບຕໍ່ຈົນກ່ວາ a
.ອື່ນ or .endif ຖືກພົບເຫັນ.
ສໍາລັບ loops ປົກກະຕິແລ້ວຖືກນໍາໃຊ້ເພື່ອນໍາໃຊ້ຊຸດຂອງກົດລະບຽບກັບບັນຊີລາຍຊື່ຂອງໄຟລ໌. syntax ຂອງ a
ສໍາລັບ loop ແມ່ນ:
.ສໍາລັບ ຕົວແປ in ການສະແດງອອກ
.endfor
ຫຼັງຈາກສໍາລັບການ ການສະແດງອອກ ຖືກປະເມີນ, ມັນຖືກແບ່ງອອກເປັນຄໍາສັບຕ່າງໆ. ຊ້ຳ ຕົວແປ is
ຕັ້ງໄວ້ຕາມລໍາດັບສໍາລັບແຕ່ລະຄໍາ, ແລະທົດແທນໃນ ກົດລະບຽບ ພາຍໃນຮ່າງກາຍຂອງສໍາລັບການ
ວົນ.
COMMENTS
ຄຳເຫັນເລີ່ມຕົ້ນດ້ວຍຕົວອັກສອນ hash ('#'), ທຸກບ່ອນແຕ່ຢູ່ໃນເສັ້ນຄຳສັ່ງ shell, ແລະ
ສືບຕໍ່ໄປໃນຕອນທ້າຍຂອງເສັ້ນ.
ພິເສດ ແຫຼ່ງຂໍ້ມູນ
.ບໍ່ສົນໃຈ ບໍ່ສົນໃຈຂໍ້ຜິດພາດໃດໆຈາກຄໍາສັ່ງທີ່ກ່ຽວຂ້ອງກັບເປົ້າຫມາຍນີ້, ຄືກັບວ່າ
ພວກເຂົາເຈົ້າທັງຫມົດແມ່ນນໍາຫນ້າໂດຍ dash ('-').
.ເຮັດ ປະຕິບັດຄໍາສັ່ງທີ່ກ່ຽວຂ້ອງກັບເປົ້າຫມາຍນີ້ເຖິງແມ່ນວ່າ -n or -t ທາງເລືອກໃນການ
ໄດ້ຖືກລະບຸໄວ້. ປົກກະຕິແລ້ວໃຊ້ເພື່ອໝາຍ recursive ເຮັດໃຫ້'s.
.ບໍ່ມີ ປົກກະຕິແລ້ວ ເຮັດໃຫ້ ເລືອກເປົ້າໝາຍທຳອິດທີ່ມັນພົບເປັນເປົ້າໝາຍເລີ່ມຕົ້ນທີ່ຈະເປັນ
ສ້າງຂຶ້ນຖ້າບໍ່ໄດ້ລະບຸເປົ້າໝາຍ. ແຫຼ່ງນີ້ປ້ອງກັນເປົ້າຫມາຍນີ້ຈາກການເປັນ
ເລືອກ.
.ທາງເລືອກ ຖ້າເປົ້າຫມາຍຖືກຫມາຍດ້ວຍຄຸນລັກສະນະນີ້ແລະ ເຮັດໃຫ້ ບໍ່ສາມາດຄິດອອກວິທີການ
ສ້າງມັນ, ມັນຈະບໍ່ສົນໃຈຄວາມຈິງນີ້ແລະສົມມຸດວ່າໄຟລ໌ບໍ່ຈໍາເປັນຫຼືແລ້ວ
ລາຄາ:.
.PRECIOUS ເມື່ອໃດ ເຮັດໃຫ້ ຖືກຂັດຂວາງ, ມັນເອົາເປົ້າຫມາຍທີ່ເຮັດບາງສ່ວນ. ແຫຼ່ງນີ້
ປ້ອງກັນບໍ່ໃຫ້ເປົ້າຫມາຍຖືກໂຍກຍ້າຍ.
.ງຽບ ຢ່າສະທ້ອນຄໍາສັ່ງໃດໆທີ່ກ່ຽວຂ້ອງກັບເປົ້າຫມາຍນີ້, ຄືກັບວ່າພວກເຂົາ
ທັງໝົດແມ່ນນຳໜ້າດ້ວຍເຄື່ອງໝາຍ ('@').
.ໃຊ້ ເຮັດໃຫ້ເປົ້າຫມາຍເຂົ້າໄປໃນ ເຮັດໃຫ້ເວີຊັນຂອງມະຫາພາກ. ໃນເວລາທີ່ເປົ້າຫມາຍຖືກນໍາໃຊ້ເປັນ
ແຫຼ່ງສໍາລັບເປົ້າຫມາຍອື່ນ, ເປົ້າຫມາຍອື່ນໄດ້ຮັບຄໍາສັ່ງ, ແຫຼ່ງຂໍ້ມູນ, ແລະ
ຄຸນລັກສະນະ (ຍົກເວັ້ນ .ໃຊ້) ຂອງແຫຼ່ງຂໍ້ມູນ. ຖ້າເປົ້າໝາຍມີຄຳສັ່ງຢູ່ແລ້ວ,
ໄດ້ .ໃຊ້ ຄໍາສັ່ງຂອງເປົ້າຫມາຍແມ່ນໄດ້ຕື່ມໃສ່ໃຫ້ເຂົາເຈົ້າ.
.ລໍຖ້າ ຖ້າພິເສດ .ລໍຖ້າ ແຫຼ່ງທີ່ປາກົດຢູ່ໃນເສັ້ນເພິ່ງພາອາໄສ, ແຫຼ່ງທີ່ມາກ່ອນໜ້າ
ມັນຖືກສ້າງຂື້ນກ່ອນແຫຼ່ງທີ່ປະສົບຜົນສໍາເລັດໃນສາຍ. Loops ບໍ່ເປັນ
ກວດພົບ ແລະເປົ້າໝາຍທີ່ປະກອບເປັນ loops ຈະຖືກລະເລີຍຢ່າງງຽບໆ.
ພິເສດ ເປົ້າາຍ
ເປົ້າຫມາຍພິເສດອາດຈະບໍ່ຖືກລວມເຂົ້າກັບເປົ້າຫມາຍອື່ນໆ, ຫມາຍຄວາມວ່າພວກເຂົາຕ້ອງເປັນເປົ້າຫມາຍດຽວເທົ່ານັ້ນ
ລະບຸ.
.BEGIN ເສັ້ນຄໍາສັ່ງໃດໆທີ່ຕິດກັບເປົ້າຫມາຍນີ້ແມ່ນຖືກປະຕິບັດກ່ອນທີ່ຈະມີອັນອື່ນ
ເຮັດແລ້ວ.
.ເລີ່ມຕົ້ນ ນີ້ແມ່ນປະເພດຂອງ a .ໃຊ້ ກົດລະບຽບສໍາລັບເປົ້າຫມາຍໃດຫນຶ່ງ (ທີ່ໄດ້ຖືກນໍາໃຊ້ພຽງແຕ່ເປັນແຫຼ່ງ) ທີ່
ເຮັດໃຫ້ ບໍ່ສາມາດຊອກຫາວິທີອື່ນໃນການສ້າງ. ພຽງແຕ່ໃຊ້ Shell script.
ໄດ້ .IMPSRC ຕົວແປຂອງເປົ້າຫມາຍທີ່ສືບທອດ .ເລີ່ມຕົ້ນຄໍາສັ່ງຂອງຖືກຕັ້ງເປັນ
ຊື່ຂອງເປົ້າຫມາຍຂອງຕົນເອງ.
.END ເສັ້ນຄໍາສັ່ງໃດໆທີ່ຕິດກັບເປົ້າຫມາຍນີ້ແມ່ນຖືກປະຕິບັດຫຼັງຈາກທຸກສິ່ງທຸກຢ່າງອື່ນ
ເຮັດແລ້ວ.
.ບໍ່ສົນໃຈ ໝາຍແຕ່ລະແຫຼ່ງດ້ວຍ .ບໍ່ສົນໃຈ ຄຸນລັກສະນະ. ຖ້າບໍ່ມີແຫຼ່ງ
ລະບຸໄວ້, ນີ້ແມ່ນເທົ່າກັບການລະບຸ -i ທາງເລືອກ.
.ຮວມ ບັນຊີລາຍຊື່ຂອງຄໍາຕໍ່ທ້າຍທີ່ຊີ້ບອກເຖິງໄຟລ໌ທີ່ສາມາດຖືກລວມເຂົ້າໃນໄຟລ໌ຕົ້ນສະບັບ.
ຄໍາຕໍ່ທ້າຍຕ້ອງໄດ້ຖືກປະກາດແລ້ວດ້ວຍ .SUFFIXES; ຄໍາຖັດຈາກນັ້ນ
ປະກາດຈະມີໄດເລກະທໍລີຢູ່ໃນເສັ້ນທາງຄົ້ນຫາຂອງມັນ (ເບິ່ງ .PATH) ວາງໄວ້ໃນ
.ຮວມ ຕົວແປພິເສດ, ແຕ່ລະອັນກ່ອນໜ້າດ້ວຍ a -I ທຸງ.
.ຂັດຂວາງ If ເຮັດໃຫ້ ຖືກຂັດຂວາງ, ຄໍາສັ່ງສໍາລັບເປົ້າຫມາຍນີ້ຈະຖືກປະຕິບັດ.
.LIBS ນີ້ເຮັດສໍາລັບຫ້ອງສະຫມຸດແມ່ນຫຍັງ .ຮວມ ບໍ່ສໍາລັບການລວມເອົາໄຟລ໌, ຍົກເວັ້ນວ່າ
ທຸງທີ່ໃຊ້ແມ່ນ -L.
.ຫຼັກ ຖ້າຫາກວ່າບໍ່ມີເປົ້າຫມາຍແມ່ນໄດ້ລະບຸໄວ້ໃນເວລາທີ່ ເຮັດໃຫ້ ຖືກຮຽກຮ້ອງ, ເປົ້າໝາຍນີ້ຈະຖືກສ້າງຂຶ້ນ. ນີ້
ແມ່ນຖືກຕັ້ງໄວ້ສະເໝີ, ຢ່າງຊັດເຈນ, ຫຼື implicitly ໃນເວລາທີ່ ເຮັດໃຫ້ ເລືອກຄ່າເລີ່ມຕົ້ນ
ເປົ້າຫມາຍ, ເພື່ອໃຫ້ຜູ້ໃຊ້ມີວິທີການອ້າງອີງເຖິງເປົ້າຫມາຍເລີ່ມຕົ້ນໃນຄໍາສັ່ງ
ເສັ້ນ.
.MAKEFILEDEPS
ເປີດໃຊ້ຫນ້າທີ່ "Remaking Makefiles", ດັ່ງທີ່ໄດ້ອະທິບາຍໄວ້ໃນ REMAKING
ເອກະສານ ພາກລຸ່ມ.
.ເຮັດທຸງ ເປົ້າຫມາຍນີ້ສະຫນອງວິທີການກໍານົດທຸງສໍາລັບ ເຮັດໃຫ້ ໃນເວລາທີ່ makefile ຖືກນໍາໃຊ້.
ທຸງ ແມ່ນ ເປັນ ຖ້າ ຫາກ ວ່າ typed ກັບ ແກະ ໄດ້, ເຖິງ ແມ່ນ ວ່າ -f ທາງເລືອກຈະບໍ່ມີ
ຜົນກະທົບ. ທຸງ (ຍົກເວັ້ນ -f) ແລະການມອບຫມາຍຕົວແປທີ່ລະບຸໄວ້ເປັນແຫຼ່ງ
ສໍາລັບເປົ້າຫມາຍນີ້ຍັງໄດ້ເພີ່ມເຕີມກັບ .ເຮັດທຸງ ຕົວແປພາຍໃນ. ກະລຸນາ
ສັງເກດເຫັນຄວາມແຕກຕ່າງລະຫວ່າງເປົ້າຫມາຍນີ້ແລະ .ເຮັດທຸງ ຕົວແປພາຍໃນ:
ການກໍານົດທາງເລືອກຫຼືການກໍານົດຕົວແປເປັນແຫຼ່ງສໍາລັບເປົ້າຫມາຍນີ້ຈະ
ຜົນກະທົບ ທັງສອງ makefile ໃນປະຈຸບັນແລະຂະບວນການທັງຫມົດທີ່ ເຮັດໃຫ້ ປະຕິບັດ.
.MFLAGS ຄືກັນກັບຂ້າງເທິງ, ສໍາລັບຄວາມເຂົ້າກັນໄດ້ໃນດ້ານຫລັງ.
.NOTPARALLEL
ປິດການນຳໃຊ້ໂໝດຂະໜານ.
.NO_PARALLEL
ຄືກັນກັບຂ້າງເທິງ, ສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບອື່ນໆ ຕອນແລງ variants
.ສັ່ງ ເປົ້າຫມາຍທີ່ມີຊື່ແມ່ນເຮັດຕາມລໍາດັບ.
.PATH ແຫຼ່ງຂໍ້ມູນແມ່ນໄດເລກະທໍລີທີ່ຈະຊອກຫາໄຟລ໌ທີ່ບໍ່ພົບຢູ່ໃນ
ໄດເລກະທໍລີປະຈຸບັນ. ຖ້າບໍ່ມີແຫຼ່ງໃດຖືກລະບຸ, ໃດໆທີ່ລະບຸໄວ້ກ່ອນຫນ້ານີ້
ໄດເລກະທໍລີຖືກລຶບ. ຖ້າເປັນໄປໄດ້, ໃຫ້ໃຊ້ .PATH ມັກຫຼາຍກວ່າການນໍາໃຊ້
ໄດ້ VPATH ຕົວແປ.
.PATHបច្ច័យ
ແຫຼ່ງຂໍ້ມູນແມ່ນໄດເລກະທໍລີທີ່ຈະຄົ້ນຫາສໍາລັບໄຟລ໌ suffixed ບໍ່ແມ່ນ
ພົບເຫັນຢູ່ໃນໄດເລກະທໍລີປະຈຸບັນ. ໄດ້ ເຮັດໃຫ້ ຜົນປະໂຫຍດທໍາອິດຄົ້ນຫາ suffixed
ເສັ້ນທາງຄົ້ນຫາ, ກ່ອນທີ່ຈະກັບຄືນໄປຫາເສັ້ນທາງເລີ່ມຕົ້ນຖ້າໄຟລ໌ບໍ່ພົບ
ຢູ່ທີ່ນັ້ນ. ແບບຟອມນີ້ແມ່ນຕ້ອງການສໍາລັບ .LIBS ແລະ .ຮວມ ເຮັດວຽກ.
.PHONY ສະ ໝັກ .PHONY ຄຸນລັກສະນະຂອງແຫຼ່ງທີ່ລະບຸ. ເປົ້າຫມາຍທີ່ມີນີ້
ຄຸນລັກສະນະແມ່ນຖືກພິຈາລະນາສະເຫມີໄປບໍ່ທັນສະໄຫມ.
.POSIX ປັບ ເຮັດໃຫ້ພຶດຕິກໍາຂອງເພື່ອໃຫ້ກົງກັບຂໍ້ກໍານົດ POSIX ທີ່ກ່ຽວຂ້ອງ. (ຫມາຍເຫດນີ້
ປິດການໃຊ້ງານຄຸນສົມບັດ "Remaking Makefiles".)
.PRECIOUS ສະ ໝັກ .PRECIOUS ຄຸນລັກສະນະຂອງແຫຼ່ງທີ່ລະບຸ. ຖ້າບໍ່ມີແຫຼ່ງ
ລະບຸ, ໄດ້ .PRECIOUS ຄຸນສົມບັດຖືກນຳໃຊ້ກັບທຸກເປົ້າໝາຍໃນໄຟລ໌.
.SHELL ເລືອກແກະອື່ນ. ແຫຼ່ງຂອງເປົ້າຫມາຍນີ້ມີຮູບແບບ ທີ່ສໍາຄັນ=ມູນຄ່າ.
ໄດ້ ທີ່ສໍາຄັນ ແມ່ນຫນຶ່ງໃນ:
ເສັ້ນທາງ ກໍານົດເສັ້ນທາງໄປສູ່ແກະໃຫມ່.
ຊື່ ລະບຸຊື່ຂອງແກະໃຫມ່. ນີ້ອາດຈະເປັນຫນຶ່ງໃນ
ສາມແກະທີ່ສ້າງຂຶ້ນໃນຕົວ (ເບິ່ງຂ້າງລຸ່ມນີ້) ຫຼືຊື່ອື່ນ.
ງຽບ ລະບຸຄຳສັ່ງ shell ເພື່ອປິດສຽງດັງ.
echo ລະບຸຄຳສັ່ງ shell ເພື່ອເປີດສຽງສະທ້ອນ.
ການກັ່ນຕອງ ປົກກະຕິແລ້ວ shells ພິມຄໍາສັ່ງ echo off ກ່ອນທີ່ຈະປິດ echoing.
ນີ້ແມ່ນສາຍທີ່ແນ່ນອນທີ່ຈະຖືກພິມອອກໂດຍແກະແລະເປັນ
ໃຊ້ເພື່ອກັ່ນຕອງຜົນຜະລິດຂອງແກະເພື່ອເອົາຄໍາສັ່ງ echo off.
echoFlag ຕົວເລືອກແກະທີ່ເປີດສຽງດັງ.
errFlag ຕົວເລືອກ shell ເພື່ອເປີດການກວດສອບຄວາມຜິດພາດ. ຖ້າຫາກວ່າການກວດສອບຄວາມຜິດພາດແມ່ນເປີດ,
shell ຄວນອອກຖ້າຄໍາສັ່ງສົ່ງຄືນສະຖານະທີ່ບໍ່ແມ່ນສູນ.
hasErrCTl ຄວາມຈິງຖ້າແກະມີການຄວບຄຸມຄວາມຜິດພາດ.
ໃຫ້ກວດເບິ່ງ If hasErrCTl ເປັນຄວາມຈິງຫຼັງຈາກນັ້ນນີ້ແມ່ນຄໍາສັ່ງ shell ເພື່ອປ່ຽນຄວາມຜິດພາດ
ການກວດສອບກ່ຽວກັບການ. ຖ້າ hasErrCTl ແມ່ນຜິດຫຼັງຈາກນັ້ນນີ້ແມ່ນແມ່ແບບຄໍາສັ່ງ
ກັບຄໍາສັ່ງ echo ສໍາລັບການກວດສອບຄວາມຜິດພາດທີ່ຖືກປິດໃຊ້ງານ. ແມ່ແບບ
ຕ້ອງມີ '%s'.
ບໍ່ສົນໃຈ If hasErrCTl ເປັນຄວາມຈິງ, ນີ້ແມ່ນຄໍາສັ່ງ shell ເພື່ອປ່ຽນຄວາມຜິດພາດ
ກຳລັງກວດເຊັກ. ຖ້າ hasErrCTl ບໍ່ຖືກຕ້ອງ, ນີ້ແມ່ນແມ່ແບບຄໍາສັ່ງທີ່ຈະ
ປະຕິບັດຄໍາສັ່ງເພື່ອໃຫ້ຄວາມຜິດພາດຖືກລະເລີຍ. ແມ່ແບບຕ້ອງ
ມີ '%s'.
meta ນີ້ແມ່ນສາຍຂອງຕົວອັກສອນ meta ຂອງແກະ.
ເຄື່ອງກໍ່ສ້າງ ນີ້ແມ່ນສະຕຣິງທີ່ຖືທັງຫມົດຄໍາສັ່ງ buildin ຂອງແກະແຍກອອກ
ໂດຍຊ່ອງຫວ່າງ. ໄດ້ meta ແລະ ເຄື່ອງກໍ່ສ້າງ ສະຕຣິງຖືກໃຊ້ໃນຮູບແບບການເຂົ້າກັນ.
ເມື່ອເສັ້ນຄໍາສັ່ງບໍ່ມີຕົວອັກສອນ meta ຫຼືເລີ່ມຕົ້ນດ້ວຍ
shell buildin, ມັນຖືກປະຕິບັດໂດຍກົງໂດຍບໍ່ມີການຮຽກຮ້ອງ shell.
ໃນເວລາທີ່ຫນຶ່ງຂອງສາຍເຫຼົ່ານີ້ (ຫຼືທັງສອງ) ຫວ່າງເປົ່າຄໍາສັ່ງທັງຫມົດແມ່ນ
ຖືກປະຫານຜ່ານແກະ.
unsetenv ຖ້າເປັນຈິງ, ເອົາຕົວແປສະພາບແວດລ້ອມ ENV ອອກກ່ອນທີ່ຈະດໍາເນີນການໃດໆ
ຄໍາສັ່ງ. ນີ້ແມ່ນເປັນປະໂຫຍດສໍາລັບ Korn-shell (ksh).
ຄ່າທີ່ເປັນສະຕຣິງຈະຕ້ອງຖືກອ້ອມຮອບດ້ວຍວົງຢືມຄູ່. ຄ່າ Boolean ແມ່ນ
ລະບຸເປັນ 'T' ຫຼື 'Y' (ໃນກໍລະນີໃດກໍ່ຕາມ) ເພື່ອຫມາຍຄວາມວ່າເປັນຄວາມຈິງ. ຄ່າອື່ນໃດຖືກເອົາ
ຫມາຍຄວາມວ່າບໍ່ຖືກຕ້ອງ.
ມີຫຼາຍການນໍາໃຊ້ .SHELL ເປົ້າຫມາຍ:
· ການເລືອກຫນຶ່ງຂອງແກະທີ່ສ້າງຂຶ້ນ. ນີ້ແມ່ນເຮັດໄດ້ໂດຍການພຽງແຕ່ລະບຸ
ຊື່ຂອງຫອຍກັບ ຊື່ ຄໍາສໍາຄັນ. ມັນຍັງສາມາດແກ້ໄຂໄດ້
ຕົວກໍານົດການຂອງ buildin shell ໂດຍພຽງແຕ່ລະບຸຄໍາສໍາຄັນອື່ນໆ (ຍົກເວັ້ນ
ສໍາລັບການ ເສັ້ນທາງ).
· ການນໍາໃຊ້ການປະຕິບັດອັນອື່ນສໍາລັບການຫນຶ່ງໃນແກະທີ່ສ້າງໃນ. ນີ້ແມ່ນເຮັດໄດ້ໂດຍ
ການລະບຸເສັ້ນທາງໄປຫາ executable ກັບ ເສັ້ນທາງ ຄໍາສໍາຄັນ. ຖ້າສຸດທ້າຍ
ອົງປະກອບແມ່ນຄືກັນກັບຊື່ຂອງ buildin shell ໄດ້, ບໍ່ຈໍາເປັນຕ້ອງມີຊື່
ລະບຸ; ຖ້າມັນແຕກຕ່າງກັນ, ຕ້ອງໃສ່ຊື່:
.SHELL: path="/usr/local/bin/sh"
ເລືອກແກະທີ່ສ້າງຂຶ້ນໃນ "sh" ແຕ່ຈະປະຕິບັດມັນຈາກ /usr/local/bin/sh.
ເຊັ່ນດຽວກັນກັບກໍລະນີທີ່ຜ່ານມາ, ມັນເປັນໄປໄດ້ທີ່ຈະດັດແປງພາລາມິເຕີຂອງ
buildin shell ໂດຍພຽງແຕ່ລະບຸໃຫ້ເຂົາເຈົ້າ.
· ການນໍາໃຊ້ແກະທີ່ແຕກຕ່າງກັນທັງຫມົດ. ນີ້ແມ່ນເຮັດໄດ້ໂດຍການລະບຸຄໍາສໍາຄັນທັງຫມົດ.
ແກະທີ່ສ້າງຂຶ້ນໃນຕົວແມ່ນ "sh", "csh" ແລະ "ksh". ເນື່ອງຈາກວ່າ FreeBSD ບໍ່ມີ ksh in
/ ຖັງ, ມັນບໍ່ສະຫລາດທີ່ຈະລະບຸ ຊື່="ksh" ໂດຍບໍ່ມີການລະບຸເສັ້ນທາງ.
.ງຽບ ສະ ໝັກ .ງຽບ ຄຸນລັກສະນະຂອງແຫຼ່ງທີ່ລະບຸ. ຖ້າບໍ່ມີແຫຼ່ງ
ລະບຸ, ໄດ້ .ງຽບ attribute ຖືກນຳໃຊ້ກັບທຸກຄຳສັ່ງໃນໄຟລ໌.
.SUFFIXES ແຕ່ລະແຫຼ່ງລະບຸຄໍາຕໍ່ທ້າຍ ເຮັດໃຫ້. ຖ້າບໍ່ມີການລະບຸແຫຼ່ງທີ່ມາ, ໃດ
ຄຳຕໍ່ທ້າຍທີ່ລະບຸໄວ້ກ່ອນໜ້າຈະຖືກລຶບ.
.ເຕືອນ ແຕ່ລະແຫຼ່ງລະບຸທຸງເຕືອນຕາມທີ່ໄດ້ອະທິບາຍໄວ້ກ່ອນໜ້ານີ້ -x ຄໍາສັ່ງ
ທາງເລືອກເສັ້ນ. ທຸງຄຳເຕືອນທີ່ລະບຸໄວ້ໃນບັນທັດຄຳສັ່ງແມ່ນມີຄວາມສຳຄັນກວ່າ
ທຸງທີ່ລະບຸໄວ້ໃນ makefile. ນອກຈາກນີ້, ທຸງເຕືອນສາຍຄໍາສັ່ງຖືກ pushed ກັບ
ຍ່ອຍເຮັດໃຫ້ຜ່ານຕົວແປສະພາບແວດລ້ອມ MAKEFLAGS ເພື່ອໃຫ້ທຸງເຕືອນ
ທີ່ລະບຸໄວ້ໃນເສັ້ນຄໍາສັ່ງຈະມີອິດທິພົນຕໍ່ການຜະລິດຍ່ອຍທັງຫມົດ. ທຸງຫຼາຍສາມາດ
ຖືກລະບຸໄວ້ໃນອັນດຽວ .ເຕືອນ ເປົ້າຫມາຍໂດຍການແຍກພວກມັນດ້ວຍຊ່ອງຫວ່າງ.
REMAKING ເອກະສານ
ຖ້າຫາກວ່າເປົ້າຫມາຍພິເສດ .MAKEFILEDEPS ມີຢູ່ໃນ Makefile, ເຮັດໃຫ້ ເປີດໃຊ້ "Remaking
Makefiles” ຄຸນນະສົມບັດ. ຫຼັງຈາກການອ່ານ Makefile ແລະໄຟລ໌ທັງຫມົດທີ່ໄດ້ຮັບການນໍາໃຊ້
.ລວມທັງ or .ຮວມ ຄໍາແນະນໍາ (ແຫຼ່ງ Makefiles) ເຮັດໃຫ້ ພິຈາລະນາແຕ່ລະແຫຼ່ງ Makefile ເປັນ
ເປົ້າໝາຍ ແລະພະຍາຍາມສ້າງມັນຄືນໃໝ່. ທັງກົດລະບຽບທີ່ຊັດເຈນແລະ implicit ຖືກກວດສອບແລະແຫຼ່ງທັງຫມົດ
Makefiles ຈະຖືກປັບປຸງຖ້າຈໍາເປັນ. ຖ້າ Makefiles ແຫຼ່ງໃດຖືກສ້າງໃຫມ່, ເຮັດໃຫ້
restarts ຈາກສະຖານະສະອາດ.
ເພື່ອປ້ອງກັນບໍ່ໃຫ້ loops ທີ່ບໍ່ມີຂອບເຂດ, ແຫຼ່ງ Makefile ຕໍ່ໄປນີ້ຖືກລະເລີຍ:
· :: ເປົ້າໝາຍທີ່ບໍ່ມີເງື່ອນໄຂເບື້ອງຕົ້ນ
· ! ເປົ້າຫມາຍ
· ເປົ້າຫມາຍທີ່ມີ .PHONY or .EXEC attributes
· ເປົ້າໝາຍໂດຍບໍ່ມີເງື່ອນໄຂ ແລະບໍ່ມີຄຳສັ່ງ
ເມື່ອ remaking ແຫຼ່ງ Makefile ທາງເລືອກ -t (ແຕະເປົ້າຫມາຍ), -q (ແບບສອບຖາມ), ແລະ -n (ບໍ່ມີ exec)
ບໍ່ມີຜົນບັງຄັບໃຊ້, ເວັ້ນເສຍແຕ່ວ່າແຫຼ່ງ Makefile ຖືກລະບຸຢ່າງຊັດເຈນວ່າເປັນເປົ້າຫມາຍໃນ ເຮັດໃຫ້
ບັນທັດຄໍາສັ່ງ.
ນອກຈາກນັ້ນ, ລະບົບ makefiles ແລະ .ຂື້ນຢູ່ ບໍ່ໄດ້ຖືກພິຈາລະນາເປັນ Makefiles ທີ່ສາມາດເປັນ
ສ້າງຂຶ້ນໃໝ່.
ENVIRONMENT
ໄດ້ ເຮັດໃຫ້ utility ໃຊ້ຕົວແປສະພາບແວດລ້ອມຕໍ່ໄປນີ້, ຖ້າພວກເຂົາມີ: MACHINE, MAKE,
MAKEFLAGS, MAKEOBJDIR, MAKEOBJDIRPREFIX, ແລະ MAKESYSPATH.
ໃຊ້ fmake ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net