ນີ້ແມ່ນຄໍາສັ່ງ metaconfig ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
metaconfig - ຕັ້ງຄ່າຕົວສ້າງສະຄຣິບ
ສະຫຼຸບສັງລວມ
metaconfig [ -dhkmostvwGMV ] [ -L dir ]
ລາຍລະອຽດ
Metaconfig ແມ່ນໂຄງການທີ່ສ້າງ Configure scripts. ຖ້າເຈົ້າບໍ່ຮູ້ວ່າ a
Configure script ແມ່ນ, ກະລຸນາຂ້າມໄປທີ່ TUTORIAL ພາກສ່ວນຂອງໜ້າຄູ່ມືນີ້. ຖ້າເຈົ້າຕ້ອງການ
ລາຍລະອຽດເຕັມ (ຢ່າງເປັນທາງການ) ຂອງວິທີການນໍາໃຊ້ metaconfig ແລະຫນ່ວຍງານຂອງມັນ, ກະລຸນາເບິ່ງທີ່
ການອ້າງອິງ ພາກ. ຕໍ່ໄປນີ້ແມ່ນການນໍາສະເຫນີແລະກະສານອ້າງອີງໄວສໍາລັບຄວາມຮູ້
ຜູ້ໃຊ້.
Metaconfig ດໍາເນີນການຈາກຊຸດຂອງ ຫນ່ວຍ ເຊິ່ງກໍານົດທຸກສິ່ງທຸກຢ່າງທີ່ metaconfig ຮູ້ກ່ຽວກັບ
ການພົກພາ. ແຕ່ລະຫນ່ວຍແມ່ນເປັນຂອງຕົນເອງ, ແລະບໍ່ຈໍາເປັນຕ້ອງລົງທະບຽນທຸກບ່ອນ
ນອກເໜືອໄປຈາກການລວມເອົາຢູ່ໃນລະບົບ U ສາທາລະນະ ຫຼືລາຍຊື່ U ສ່ວນຕົວຂອງເຈົ້າ. ຖ້າ
ຊຸດ dist (ເຊິ່ງ metaconfig ເປັນສ່ວນຫນຶ່ງ) ຖືກຕິດຕັ້ງຢູ່ໃນ LIB, ຫຼັງຈາກນັ້ນ U
ໄດເລກະທໍລີແມ່ນ LIB/dist/mcon/U. ໃນເຄື່ອງນີ້, ໄດເລກະທໍລີ LIB ແມ່ນ /usr/share/dist. ຂອງເຈົ້າ
ໄດເລກະທໍລີ U ສ່ວນຕົວ, ຖ້າທ່ານມີຫນຶ່ງ, ແມ່ນຢູ່ໃນບັນຊີລະດັບສູງສຸດຂອງຊຸດຂອງທ່ານ.
ກ່ອນທີ່ທ່ານຈະສາມາດແລ່ນໄດ້ metaconfig ເຈົ້າຕ້ອງເຮັດຫຼາຍອັນ:
· ສ້າງໄຟລ໌ .package ໃນໄດເລກະທໍລີລະດັບສູງສຸດຂອງແພັກເກັດໂດຍການແລ່ນ packinit.
ໂຄງການນີ້ຈະຖາມທ່ານກ່ຽວກັບຊຸດຂອງທ່ານແລະຈື່ຈໍາສິ່ງທີ່ທ່ານບອກມັນດັ່ງນັ້ນ
ທຸກໂຄງການຫ່າງໄກສາມາດສະຫລາດ.
· ປຶກສາຫາລືຄໍາສັບຕ່າງໆ (ໃນ LIB / dist / mcon) ແລະຂຽນສະຄຣິບຂອງທ່ານແລະໂຄງການ C ຂອງທ່ານ
ໃນແງ່ຂອງສັນຍາລັກທີ່ metaconfig ຮູ້ວິທີການກໍານົດ. ເຈົ້າບໍ່ ຈຳ ເປັນຕ້ອງບອກ
metaconfig ສັນຍາລັກທີ່ທ່ານໃຊ້, ເນື່ອງຈາກວ່າ metaconfig ຈະຄິດເຖິງສິ່ງນັ້ນສໍາລັບທ່ານ.
· ສ້າງສະຄຣິບ .SH ທີ່ຈຳເປັນເພື່ອຂຽນ Makefiles ຫຼື shell scripts ທີ່ຈະຂຶ້ນກັບ
ກ່ຽວກັບຄ່າທີ່ກໍານົດໂດຍ Configure. ມີໂຄງການທີ່ເອີ້ນວ່າ ເຮັດໃຫ້SH ນັ້ນຈະຊ່ວຍທ່ານໄດ້
ປ່ຽນສະຄຣິບທຳມະດາເປັນແມ່ແບບ script.SH; ບາງການແກ້ໄຂຍັງຈະຕ້ອງເປັນ
ປະຕິບັດຢູ່ໃນໄຟລ໌ .SH ຜົນໄດ້ຮັບເພື່ອຍ້າຍພາກສ່ວນການຕັ້ງຄ່າຕົວແປໃນ
ສ່ວນເທິງສຸດຂອງສະຄຣິບ (ເບິ່ງຄຳເຫັນໃນແຖວທີ່ສ້າງຂຶ້ນໂດຍ ເຮັດໃຫ້SH ພາຍໃນ .SH ຂອງທ່ານ
ໄຟລ).
·ສ້າງໄຟລ໌ MANIFEST.new ໃນໄດເລກະທໍລີລະດັບສູງສຸດຂອງເຈົ້າທີ່ລາຍຊື່ໄຟລ໌ທັງຫມົດໃນ
ຊຸດຂອງເຈົ້າ. ໄຟລ໌ນີ້ຈະຍັງຄົງເປັນສ່ວນຕົວ ແລະຈະບໍ່ເປັນສ່ວນຫນຶ່ງຂອງໄຟລ໌ສຸດທ້າຍ
ການແຜ່ກະຈາຍ. (ເພື່ອຄວາມສະດວກ, ໄຟລ໌ MANIFEST ຈະຖືກນໍາໃຊ້ໂດຍ metaconfig if
ຍັງບໍ່ມີໄຟລ໌ MANIFEST.new ເທື່ອ.) ຊື່ໄຟລ໌ຄວນຈະເປັນຊ່ອງຂໍ້ມູນທໍາອິດໃນແຕ່ລະ
ສາຍ. ຫຼັງຈາກທີ່ຊ່ອງຫວ່າງບາງຢ່າງທີ່ທ່ານສາມາດເພີ່ມຄໍາຄິດເຫັນສັ້ນອະທິບາຍໄຟລ໌ຂອງທ່ານ. ເທົ່ານັ້ນ
ໄຟລ໌ແຫຼ່ງຄວນຈະຖືກລະບຸໄວ້ໃນນັ້ນ. ໄຟລ໌ພິເສດ patchlevel.h (ເຊິ່ງແມ່ນ
ຈັດການແລະຮັກສາໂດຍເຄື່ອງມື patching - ເບິ່ງ pat(1)) ຄວນເປັນສ່ວນຫນຶ່ງຂອງ
ໄຟລ໌ MANIFEST.new, ແຕ່ບາງເຄື່ອງມືອາດຈະຖືກລະເລີຍຢ່າງງຽບໆ. ຕາມກົດລະບຽບ,
ພຽງແຕ່ໄຟລ໌ທີ່ຮັກສາໄວ້ໂດຍ RCS ຄວນຈະຖືກລະບຸໄວ້ໃນນັ້ນ, patchlevel.h ໄຟລ໌
ຂໍ້ຍົກເວັ້ນທີ່ສໍາຄັນອັນຫນຶ່ງ.
· ທາງເລືອກອື່ນ, ທ່ານອາດຈະຕ້ອງການສ້າງໄຟລ໌ MANIFEST, ເຊິ່ງຈະເປັນສະບັບທີ່ສົ່ງອອກ
ຂອງ MANIFEST.new ຂອງເຈົ້າ. ໄຟລ໌ນັ້ນຈະຕ້ອງຖືກສ້າງເປັນສ່ວນໜຶ່ງຂອງການປ່ອຍ, ie ລະບຸໄວ້ໃນທັງສອງ
MANIFEST.new ແລະ MANIFEST ຂອງເຈົ້າເອງ. ຫນຶ່ງໃນ metaconfig ຫນ່ວຍງານຮູ້ກ່ຽວກັບເລື່ອງນີ້
file ແລະຈະບັງຄັບໃຫ້ Configure ດໍາເນີນການກວດສອບການປ່ອຍ, ຮັບປະກັນໄຟລ໌ທັງຫມົດ
ລະບຸໄວ້ວ່າມີສ່ວນຫນຶ່ງຂອງການແຈກຢາຍ. ໄຟລ໌ MANIFEST ແລະ MANIFEST.new ຄວນ
ແຕກຕ່າງກັນ, ບໍ່ແມ່ນການເຊື່ອມຕໍ່.
· ຄັດລອກໄຟລ໌ .U ໃດໆກໍຕາມທີ່ທ່ານຕ້ອງການທີ່ຈະດັດແປງໃສ່ໄດເລກະທໍລີ U ສ່ວນຕົວຂອງທ່ານ. ໄຟລ໌ .U ໃດ
ໃນລາຍຊື່ U ສ່ວນຕົວຂອງເຈົ້າຈະຖືກໃຊ້ໃນຄວາມມັກຂອງ U
ໄດເລກະທໍລີ. ສໍາລັບຕົວຢ່າງ, ວິທີຫນຶ່ງທີ່ຈະບັງຄັບໃຫ້ລວມເອົາຫນ່ວຍງານໃດນຶ່ງແມ່ນການຄັດລອກ End.U
ໄຟລ໌ໄປຫາໄດເລກະທໍລີ .U ຂອງທ່ານແລະເພີ່ມຊື່ຂອງຫນ່ວຍງານທີ່ທ່ານຕ້ອງການເປັນການຂຶ້ນກັບ
ໃນຕອນທ້າຍຂອງ ?MAKE: ເສັ້ນ. ຫນ່ວຍງານທີ່ແນ່ນອນສາມາດຖືກບັງຄັບດ້ວຍວິທີນີ້ເທົ່ານັ້ນ, ຄື
ຮູບແບບ Warn_*.U ແລະ Chk_*.U. ນອກນັ້ນທ່ານຍັງສາມາດປັບແຕ່ງຄ່າເລີ່ມຕົ້ນທີ່ແນ່ນອນ
ຕັ້ງຄ່າຕົວແປໂດຍການຄັດລອກ Myinit.U ໄປໃສ່ໄດເລກະທໍລີ U ສ່ວນຕົວຂອງແພັກເກັດຂອງເຈົ້າ ແລະ
ກໍານົດຕົວແປໃນຫນ່ວຍນັ້ນ.
ໃນປັດຈຸບັນທ່ານພ້ອມທີ່ຈະດໍາເນີນການ metaconfig. ທີ່ຈະສ້າງເປັນ ກໍາຫນົດຄ່າ ໄຟລ໌, ແລະທາງເລືອກ a
config_h.SH ໄຟລ໌ (ຖ້າແຫຼ່ງຂອງທ່ານໃຊ້ສັນຍາລັກ C). ໄຟລ໌ທີ່ສ້າງຂຶ້ນຈະ
ອັດຕະໂນມັດຈະຖືກເພີ່ມໃສ່ MANIFEST.new ຂອງທ່ານຖ້າຈໍາເປັນ. ຢ່າລືມປັບປຸງຂອງທ່ານ
ໄຟລ໌ MANIFEST ຢ່າງໃດກໍຕາມ.
ເພື່ອສ້າງຫນ່ວຍງານໃຫມ່, ເຮັດດັ່ງຕໍ່ໄປນີ້:
· ສຳເນົາໜ່ວຍທີ່ຄ້າຍກັບໄຟລ໌ .U ໃໝ່. ຊື່ທີ່ທ່ານເລືອກຄວນຈະເປັນຊື່ຂອງ a
ຕົວແປທີ່ສ້າງຂຶ້ນໂດຍຫນ່ວຍງານ, ເຖິງແມ່ນວ່ານີ້ແມ່ນພຽງແຕ່ຄວາມສະດວກສະບາຍສໍາລັບທ່ານ, ບໍ່ແມ່ນ a
ຄວາມຕ້ອງການ. ມັນຄວນຈະມີ 12 ຕົວອັກສອນ ຫຼືໜ້ອຍກວ່າເພື່ອປ້ອງກັນການຕັດຊື່ໄຟລ໌.
ຕົວຈິງແລ້ວ, ມັນຄວນຈະເປັນ 10 ຫຼືຫນ້ອຍເພື່ອໃຫ້ຜູ້ທີ່ຕ້ອງການໃຊ້ RCS ສາມາດມີ
a .U,v ສຸດທ້າຍໂດຍບໍ່ມີການຟັກ. Metaconfig ໃຊ້ກໍລະນີຂອງຕົວອັກສອນທໍາອິດທີ່ຈະ
ກໍານົດວ່າຕົວແປໃດຖືກຜະລິດໂດຍຫນ່ວຍງານນີ້, ດັ່ງນັ້ນຢ່າໃຊ້ຕົວພິມໃຫຍ່ຂອງເຈົ້າ
ຊື່ຫນ່ວຍຖ້າມັນຄວນຈະຜະລິດຕົວແປຂອງແກະ.
· ແກ້ໄຂໄຟລ໌ .U ໃໝ່ເພື່ອເຮັດສິ່ງທີ່ທ່ານຕ້ອງການ. ທໍາອິດ ?MAKE: ເສັ້ນຊີ້ໃຫ້ເຫັນເຖິງ
ການເພິ່ງພາອາໄສ; ກ່ອນໜ້າຈໍ້າບັນຊີລາຍຊື່ສຸດທ້າຍ ຕົວແປທັງໝົດທີ່ໜ່ວຍນີ້ກຳນົດ, ແລະ
ຫຼັງຈາກຈໍ້າສອງເມັດສຸດທ້າຍ, ຕົວແປທັງຫມົດ (ຫຼືຫນ່ວຍອື່ນໆ) ທີ່ຫນ່ວຍນີ້ຂຶ້ນກັບ.
ມັນເປັນສິ່ງສໍາຄັນຫຼາຍທີ່ບັນຊີລາຍຊື່ເຫຼົ່ານີ້ຖືກຕ້ອງ. ຖ້າການເພິ່ງພາອາໄສເປັນທາງເລືອກ ແລະ ກ
ສາມາດນຳໃຊ້ຄ່າເລີ່ມຕົ້ນໄດ້, ທ່ານຄວນນຳໜ້າການເພິ່ງພາອາໄສດ້ວຍເຄື່ອງໝາຍ '+'. ໄດ້
ຫນ່ວຍງານທີ່ສອດຄ້ອງກັນຈະບໍ່ຖືກໂຫລດເພື່ອຄິດໄລ່ສັນຍາລັກ, ເວັ້ນເສຍແຕ່ຕ້ອງການແທ້ໆ
ໂດຍໜ່ວຍງານອື່ນ.
· ໃນຂອບເຂດທີ່ເປັນໄປໄດ້, parameterize ຫນ່ວຍບໍລິການຂອງທ່ານໂດຍອີງໃສ່ຕົວປ່ຽນ shell ໄດ້ກໍານົດໄວ້ໃນ
?INIT: ສາຍ. ນີ້ຈະຍ້າຍຄໍານິຍາມຕົວແປໄປເຖິງຫນ່ວຍ Init.U, ບ່ອນທີ່
ພວກເຂົາສາມາດຖືກລົບລ້າງໂດຍຄໍານິຍາມໃນ Myinit.U, ເຊິ່ງລວມຢູ່ຫລັງ Init.U.
· ເພີ່ມຄໍານິຍາມຂອງສັນຍາລັກ C ທີ່ຕ້ອງການເປັນ ?H: ສາຍ. ແຖວເລີ່ມຕົ້ນດ້ວຍ
?H:?%<: ໃນໄຟລ໌ .U ຈະຖືກເພີ່ມໃສ່ໄຟລ໌ config.h ສຸດທ້າຍຖ້າ ແລະພຽງແຕ່ຖ້າ
metaconfig ຕັດສິນໃຈວ່າຫນ່ວຍນີ້ແມ່ນຈໍາເປັນ. %< ຫຍໍ້ມາຈາກຊື່ຂອງໜ່ວຍ,
ທີ່ເກີດຂື້ນເປັນຊື່ຂອງໄຟລ໌ເກີນໄປ (ບໍ່ມີ .U) ຖ້າທ່ານປະຕິບັດຕາມ
ສົນທິສັນຍາ. ສະເຫມີໃສ່ຄໍາຄິດຄໍາເຫັນໃນແຕ່ລະແຖວ ?H: ໃນກໍລະນີທີ່ມີຕົວແປຫນຶ່ງ
ການປ່ຽນແທນກ່ອນໜ້ານີ້ເລີ່ມສະແດງຄຳເຫັນໂດຍບໍ່ໄດ້ຈົບລົງ. ຫອຍໃດນຶ່ງ
ຕົວແປທີ່ເລີ່ມຕົ້ນດ້ວຍ d_ ອາດຈະເຮັດແນວນີ້, ສະນັ້ນລະວັງ. ຖ້າຫາກວ່າທ່ານ ommit the ?%<:, ຫຼັງຈາກນັ້ນ
metaconfig ຈະພະຍາຍາມ intuit ສັນຍາລັກທີ່ມີຄໍານິຍາມທີ່ຕ້ອງການກ່ອນໃດກໍ່ຕາມ
ລວມຢູ່ໃນ config.h.
· ເພີ່ມຄຳນິຍາມຄຳສັບເປັນ ?S: ເສັ້ນສຳລັບຕົວແປ shell ແລະ ?C: ເສັ້ນສຳລັບ C
ຕົວແປ preprocessor. ເບິ່ງຫົວໜ່ວຍປັດຈຸບັນເປັນຕົວຢ່າງ. ມັນເປັນສິ່ງສໍາຄັນຫຼາຍທີ່ຈະ
ເລີ່ມແຕ່ລະລາຍການດ້ວຍຊື່ສັນຍາລັກທີ່ຖືກຕ້ອງທາງຊ້າຍ, ແລະສິ້ນສຸດແຕ່ລະລາຍການດ້ວຍ ?C:. ຫຼື
?S:. ສາຍ. ສູດການຄິດໄລ່ທີ່ແປລາຍການສັນຍາລັກ C preprocessor ສໍາລັບ
ຄໍາສັບໃນຄໍາເຫັນສໍາລັບ config.h ແມ່ນຂຶ້ນກັບນີ້.
·ໃຫ້ແນ່ໃຈວ່າຄໍາສັ່ງຂອງທັງຫມົດຂອງທ່ານ? ສາຍແມ່ນຖືກຕ້ອງ. ຄໍາສັ່ງທີ່ຖືກຕ້ອງແມ່ນ:
?RCS: ແລະ ?X: ໂດຍພື້ນຖານແລ້ວພຽງແຕ່ຄຳເຫັນ
?ເຮັດ: metaconfig dependencies
?Y: ຄໍາສັ່ງການຈັດວາງຫົວໜ່ວຍ
?S: ຄໍານິຍາມ shell glossary
?C: ຄໍານິຍາມ C ຄໍານິຍາມ
?H: config.h ຄໍານິຍາມ
?m: confmagic.h ຄໍານິຍາມ
?W: ຕ້ອງການສັນຍາລັກ
?V: ສັນຍາລັກທີ່ເຫັນໄດ້
?F: ໄຟລ໌ທີ່ສ້າງຂຶ້ນໂດຍໜ່ວຍນີ້
?T: ສັນຍາລັກຫອຍຊົ່ວຄາວທີ່ໃຊ້
?D: ທາງເລືອກທີ່ຂຶ້ນກັບຄ່າເລີ່ມຕົ້ນ
?O: ໃຊ້ເພື່ອໝາຍຫົວໜ່ວຍທີ່ລ້າສະໄໝ
?LINT: ຄໍາແນະນໍາໂລຫະ
?INIT: ການເລີ່ມຕົ້ນສັນຍາລັກ shell
ນີ້ແມ່ນຕົວຢ່າງເພື່ອສະແດງການຈັດລໍາດັບຂອງສາຍແລະຮູບແບບຕ່າງໆທີ່ໄດ້ຮັບອະນຸຍາດ:
?RCS: $RCS-Id$
?RCS: ຂໍ້ມູນລິຂະສິດ
?RCS: $RCS-Log$
?X:
?X: ຕົວຢ່າງທີ່ສົມມຸດຕິຖານ
?X:
?ເຮັດ:d_one ສອງ: ສາມ +ສີ່ ຫ້າ
?ເຮັດ: -pick add $@ %
?Y: Default
?S:d_one:
?S: ສັນຍາລັກ shell ທໍາອິດ, ກໍານົດເງື່ອນໄຂ ONE.
?S:.
?S:ສອງ:
?S: ສັນຍາລັກຫອຍທີສອງ, ຄ່າຂອງສອງ.
?S:.
?C:ONE:
?C: ສັນຍາລັກ C ທໍາອິດ.
?C:.
?C:ສອງ:
?C: ສັນຍາລັກ C ທີສອງ.
?C:.
?H:#$d_one ONE /**/
?H:#define TWO "$ two"
?H:#$d_one ONE_TWO "$ two"
?H:.
?M:flip: HAS_FLIP
?M:#ifndef HAS_FLIP
?M:#define flip(x) flop(x)
?M:#endif
?ມ:.
?W:%<:one_two
?v:p_one p_two:p_three
?f:file ./ftest !tmp
?T:tmp var
?D:ສອງ='undef'
?LINT:ປ່ຽນສາມ
?INIT:two_init='2'
: shell code ປະຕິບັດຫນ່ວຍງານດັ່ງຕໍ່ໄປນີ້
p_one='ຫນຶ່ງ'
p_two='ສອງ'
p_three=""
ຂ້າພະເຈົ້າຂໍບອກອີກເທື່ອໜຶ່ງວ່າ: ນິຍາມຫົວໜ່ວຍຂ້າງເທິງແມ່ນ a fake ຫນຶ່ງພຽງແຕ່ສະແດງໃຫ້ເຫັນ
ຄວາມເປັນໄປໄດ້ທີ່ແຕກຕ່າງກັນ. ຫນ່ວຍງານດັ່ງກ່າວຈະຮັບໃຊ້ຈຸດປະສົງພຽງເລັກນ້ອຍຢ່າງໃດກໍ່ຕາມ ... ບາງອັນ
ຄຸນສົມບັດຂັ້ນສູງບໍ່ໄດ້ອະທິບາຍຢູ່ທີ່ນີ້. ກະລຸນາອ້າງອີງເຖິງ ການອ້າງອິງ ພາກສ່ວນສໍາລັບການເພີ່ມເຕີມ
ຂໍ້ມູນຄົບຖ້ວນ.
· ເອົາຫນ່ວຍບໍລິການເຂົ້າໄປໃນລະບົບ U ສາທາລະນະຫຼືເອກະຊົນຕາມຄວາມເຫມາະສົມ.
· ແລ່ນຄືນໃໝ່ metaconfig.
· ສົ່ງຫນ່ວຍບໍລິການຂອງທ່ານໄປ [email protected] (Raphael Manfredi) ສໍາລັບການລວມຢູ່ໃນສໍາເນົາຕົ້ນສະບັບ,
ຖ້າທ່ານຄິດວ່າມັນມີຄວາມສົນໃຈທົ່ວໄປ.
ເພື່ອເພີ່ມໂຄງການໃຫມ່ທີ່ຈະຕັ້ງຢູ່:
· ແກ້ໄຂ Loc.U, ແລະເພີ່ມຊື່ຂອງໂຄງການທັງສອງໃສ່ ?MAKE: line (ລະຫວ່າງ.
ສອງຈໍ້າສອງເມັດ) ແລະໄປຫາ loclist ຫຼື trylist (ຂຶ້ນກັບວ່າໂຄງການແມ່ນ
ບັງຄັບຫຼືບໍ່).
· ເປີດໃຊ້ metaconfig ຄືນໃໝ່.
· ສົ່ງຫນ່ວຍງານຂອງເຈົ້າມາໃຫ້ຂ້ອຍເພື່ອລວມຢູ່ໃນສໍາເນົາຕົ້ນສະບັບ, ຖ້າທ່ານຄິດວ່າມັນເປັນເລື່ອງທົ່ວໄປ
ມີຄວາມສົນໃຈ.
ບັນທຶກສໍາລັບການຂຽນໄຟລ໌ .U:
* ສະເຫມີໃຊ້ "rm -f" ເພາະວ່າມີລະບົບທີ່ rm ໂຕ້ຕອບໂດຍຄ່າເລີ່ມຕົ້ນ.
* ຢ່າໃຊ້ "set -- ... " ເພາະວ່າ '--' ບໍ່ໄດ້ເຮັດວຽກກັບທຸກໆ shell. ໃຊ້ “set x…;
ປ່ຽນ".
* ຢ່າໃຊ້ "unset ENV" ເນື່ອງຈາກ unset ບໍ່ສາມາດເຄື່ອນທີ່ຢ່າງເຕັມສ່ວນ. ເວົ້າ "ENV=''" ແທນ.
* ສະເຫມີໃຊ້ສຽງສະທ້ອນ " " (ທີ່ມີຊ່ອງຫວ່າງ) ເພາະວ່າລະບົບ Eunice.
* ພຽງແຕ່ນໍາໃຊ້ ການທົດສອບ ດ້ວຍ -r, -w, -f ຫຼື -d ເນື່ອງຈາກນັ້ນແມ່ນສະຫຼັບເຄື່ອນທີ່ເທົ່ານັ້ນ. ໃນ
ໂດຍສະເພາະ, ຫຼີກເວັ້ນການ "test -x".
* ໃຊ້ພຽງແຕ່ບັນດາໂຄງການທີ່ມາພ້ອມກັບ V7, ດັ່ງນັ້ນທ່ານຮູ້ວ່າທຸກຄົນມີພວກມັນ.
* ໃຊ້ $contains ເມື່ອທ່ານຕ້ອງການ grep ຕາມເງື່ອນໄຂ, ເພາະວ່າບໍ່ແມ່ນ greps ທັງໝົດຈະສົ່ງຄືນ a
ສະຖານະພາບທີ່ສົມເຫດສົມຜົນ. ໃຫ້ແນ່ໃຈວ່າຈະປ່ຽນເສັ້ນທາງຜົນຜະລິດໄປຫາ /dev/null, ໂດຍໃຊ້ '>/dev/null
2>&1'.
* ໃຊ້ "ຖ້າຫາກວ່າທົດສອບ" ແທນທີ່ຈະເປັນ "ຖ້າຫາກວ່າ [... ]" ນັບຕັ້ງແຕ່ບໍ່ທຸກ sh ຮູ້ການກໍ່ສ້າງຫຼັງຈາກນັ້ນ.
* ໃຊ້ myread script ສໍາລັບການປ້ອນຂໍ້ມູນເພື່ອໃຫ້ພວກເຂົາສາມາດເຮັດ shell escapes ແລະຄ່າເລີ່ມຕົ້ນ
ການປະເມີນຜົນ. ຮູບແບບທົ່ວໄປແມ່ນ
ກໍລະນີ "$grimble" ໃນ
'') dflt=452;
*) dflt="$grimble";
ວ່າ C
rp='ເຈົ້າມີຈົ່ມເທົ່າໃດ?'
. ./myread
grimble="$ans"
* ໃຊ້ສະຄິບ getfile ເມື່ອຖາມຫາຊື່ເສັ້ນທາງຂອງໄຟລ໌ເພື່ອໃຫ້ມີທາງເລືອກ
~ ການຂະຫຍາຍຊື່ແລະການກວດສອບສຸຂະພາບ. ເບິ່ງໜ່ວຍ Getfile.U ສໍາລັບລາຍລະອຽດເຕັມ.
* ໃສ່ a
$startsh
ຢູ່ເທິງສຸດຂອງທຸກໆສະຄຣິບທີ່ສ້າງຂຶ້ນທີ່ຈະຖືກເປີດຕົວຫຼືມາຈາກ
ກໍາຫນົດຄ່າ.
* ບໍ່ເຄີຍສົມມຸດ UNIX-isms ທົ່ວໄປຄືກັບຄວາມຈິງທີ່ວ່າໄຟລ໌ວັດຖຸລົງທ້າຍດ້ວຍ a .o ແລະ
ວ່າຊື່ຫ້ອງສະຫມຸດລົງທ້າຍດ້ວຍ .aທີ່ຢູ່ ການນໍາໃຊ້ $_o ແລະ $_a ຕົວແປແທນ (ເບິ່ງ
Unix.U).
* ເມື່ອເຮັດການທົດສອບ compile-link-execute, ໃຫ້ຂຽນແບບນີ້ສະເໝີ:
$cc $ccflags $ldflags try.c -o ລອງ $libs
ເນື່ອງຈາກວ່າບາງລະບົບຕ້ອງການໃຫ້ທຸງການເຊື່ອມໂຍງຖືກລະບຸກ່ອນທີ່ຈະລວບລວມ
ເປົ້າຫມາຍ (ຍົກເວັ້ນຫ້ອງສະຫມຸດເຊື່ອມຕໍ່ trailing).
* ອອກຂໍ້ຄວາມທີ່ສໍາຄັນໃນຕົວອະທິບາຍໄຟລ໌ #4, ໂດຍການນໍາໃຊ້ '>&4' ເພື່ອປ່ຽນເສັ້ນທາງການຜະລິດ.
ພຽງແຕ່ຂໍ້ຄວາມເຫຼົ່ານັ້ນຈະປາກົດໃນເວລາທີ່ -s switch ແມ່ນມອບໃຫ້ ກໍາຫນົດຄ່າ ກ່ຽວກັບ
ເສັ້ນຄໍາສັ່ງ (ຮູບແບບງຽບ).
* ພະຍາຍາມກຳນົດສະເໝີວ່າມີຄຸນສົມບັດໃດໜຶ່ງຢູ່ໃນລັກສະນະສະເພາະທີ່ສຸດຫຼືບໍ່ - ຢ່າເຮັດ
ເວົ້າວ່າ "ຖ້າ bsd" ເມື່ອທ່ານສາມາດ grep libc. ມີຫຼາຍລະບົບປະສົມອອກມີ, ແລະ
ແຕ່ລະລັກສະນະຄວນຢືນຫຼືຫຼຸດລົງດ້ວຍຕົວມັນເອງ.
* ສະເຫມີພະຍາຍາມກໍານົດວ່າຄຸນນະສົມບັດແມ່ນປະກົດຢູ່ໃນວິທີການທົ່ວໄປທີ່ສຸດ, ດັ່ງນັ້ນ
ແພກເກດອື່ນໆສາມາດນໍາໃຊ້ຫນ່ວຍງານຂອງທ່ານໄດ້.
* ເມື່ອສົງໃສ, ຕັ້ງຄ່າເລີ່ມຕົ້ນແລ້ວຖາມ. ຢ່າຄິດຫຍັງເລີຍ.
* ຖ້າທ່ານຄິດວ່າຜູ້ໃຊ້ຜິດ, ອະນຸຍາດໃຫ້ສໍາລັບຄວາມຈິງທີ່ວ່າລາວອາດຈະຖືກຕ້ອງ. ສໍາລັບ
ຕົວຢ່າງ, ລາວອາດຈະດໍາເນີນການ Configure ໃນລະບົບທີ່ແຕກຕ່າງກັນກ່ວາທີ່ລາວຈະໃຊ້
ຜະລິດຕະພັນສຸດທ້າຍ.
Metaconfig ສະຫງວນຊື່ຕໍ່ໄປນີ້ຢູ່ໃນໄດເລກະທໍລີຂອງເຈົ້າ, ແລະຖ້າທ່ານໃຊ້ຊື່ດັ່ງກ່າວມັນ
ອາດຈະຖືກ clobbered ຫຼືມີຜົນກະທົບທີ່ບໍ່ໄດ້ຄາດໄວ້ອື່ນໆ:
.MT/*
ກໍາຫນົດຄ່າ
ຕ້ອງການ
ລ້າສະໄຫມ
configure
config_h.SH
confmagic.h
U/*
MANIFEST.ໃໝ່
ນອກຈາກນັ້ນ, Configure ອາດຈະ clobber ຊື່ເຫຼົ່ານີ້ຢູ່ໃນໄດເລກະທໍລີທີ່ມັນຖືກດໍາເນີນການຢູ່ໃນ:
UU/*
config.sh
config.h
OPTIONS
ທາງເລືອກຕໍ່ໄປນີ້ແມ່ນຮັບຮູ້ໂດຍ metaconfig:
-d ເປີດໂໝດດີບັກ. ບໍ່ມີປະໂຫຍດແທ້ໆເວັ້ນເສຍແຕ່ວ່າທ່ານກໍາລັງດີບັກ metaconfig
ຕົວເອງ
-h ພິມຂໍ້ຄວາມຊ່ວຍເຫຼືອ ແລະອອກ.
-k ຮັກສາໄດເລກະທໍລີຊົ່ວຄາວ, ດັ່ງນັ້ນທ່ານສາມາດກວດເບິ່ງໄຟລ໌ທີ່ເຮັດວຽກທີ່ໃຊ້ໂດຍ
metaconfig ການກໍ່ສ້າງຂອງທ່ານ ກໍາຫນົດຄ່າ ສະຄຣິບ. ເປັນປະໂຫຍດພຽງແຕ່ໃນເວລາທີ່ debugging ໄດ້
ຫນ່ວຍງານ.
-m ສົມມຸດຄວາມຈໍາຫຼາຍແລະພື້ນທີ່ແລກປ່ຽນ. ນີ້ຈະເລັ່ງການຊອກຫາສັນຍາລັກໃນ
ແຫຼ່ງໄຟລ໌ໂດຍຈໍານວນເວລາທີ່ສໍາຄັນ, ໃນຄ່າໃຊ້ຈ່າຍຂອງຫນ່ວຍຄວາມຈໍາ
ການບໍລິໂພກ ...
-o ແຜນທີ່ສັນຍາລັກລ້າສະໄຫມກ່ຽວກັບການໃຫມ່. ໃຊ້ສະວິດນີ້ຖ້າທ່ານຍັງມີບາງອັນ
ສັນຍາລັກລ້າສະໄຫມໃນລະຫັດແຫຼ່ງຂອງທ່ານແລະບໍ່ຕ້ອງການ (ຫຼືບໍ່ສາມາດ) ເອົາອອກ
ເຂົາເຈົ້າສໍາລັບໃນປັດຈຸບັນ. ສັນຍາລັກທີ່ລ້າສະໄຫມແມ່ນຖືກລະເລີຍ, ເຖິງແມ່ນວ່າ
ຈະໃຫ້ຄໍາເຕືອນທ່ານຈາກ metaconfig.
-s ເປີດໂໝດງຽບ.
-t ສັນຍາລັກຕິດຕາມຍ້ອນວ່າເຂົາເຈົ້າໄດ້ຖືກພົບເຫັນ.
-v ເປີດໂໝດ verbose.
-w ສົມມຸດວ່າໄຟລ໌ທີ່ຕ້ອງການແມ່ນອັບເດດແລ້ວ. ນີ້ຈະຂ້າມເວລາແລະຄວາມຊົງຈໍາ
ໄລຍະການຊົມໃຊ້ຂອງການສະແກນລະຫັດແຫຼ່ງ, ຊອກຫາສັນຍາລັກທີ່ຮູ້ຈັກ. ໃຊ້ມັນ
ພຽງແຕ່ໃນເວລາທີ່ທ່ານຮູ້ວ່າໄຟລ໌ແຫຼ່ງຂອງທ່ານບໍ່ໄດ້ມີການປ່ຽນແປງກ່ຽວກັບການ
ສະນຸກເກີຂອງ metaconfig ສັນຍາລັກທີ່ໃຊ້.
-G ນອກຈາກນີ້ຍັງສະຫນອງ GNU configure-like ດ້ານຫນ້າກັບການຜະລິດ ກໍາຫນົດຄ່າ
script, ຈະຖືກລວມເຂົ້າໃນການແຈກຢາຍເຊັ່ນດຽວກັນ. ນີ້ແມ່ນພຽງແຕ່ wrapper
ປະມານ ກໍາຫນົດຄ່າ script ຕາມທໍາມະຊາດ, ແຕ່ມັນເຮັດໃຫ້ຄົນຄຸ້ນເຄີຍກັບ
ເຄື່ອງມື GNU ທີ່ຈະບໍ່ສູນເສຍໃນເວລາທີ່ປະເຊີນກັບການແຈກຢາຍໃຫມ່.
-L dir ລົບລ້າງສະຖານທີ່ຫ້ອງສະໝຸດເລີ່ມຕົ້ນ. ໂດຍປົກກະຕິພຽງແຕ່ເປັນປະໂຫຍດສໍາລັບ metaconfig
ຜູ້ຮັກສາເພື່ອນໍາໃຊ້ຫນ່ວຍງານທີ່ກໍາລັງພັດທະນາຢູ່ໃນທ້ອງຖິ່ນແທນທີ່ຈະເປັນ
ທີ່ມີຢູ່ສາທາລະນະ. ໄດ້ dir ທີ່ລະບຸໄວ້ແມ່ນຫນຶ່ງທີ່ປະກອບດ້ວຍຫົວຫນ່ວຍ
U ລະບົບ.
-M ອະນຸຍາດໃຫ້ຜະລິດ ກ confmagic.h ໄຟລ໌ເພື່ອ remap ອັດຕະໂນມັດບາງທີ່ດີ,
ສັນຍາລັກທີ່ຮູ້ຈັກກັບບາງທາງເລືອກອື່ນ, ເຊັ່ນ: ສຳເນົາ() ຖືກ remapped
ໂປ່ງໃສ memcpy() ໃນເວລາທີ່ບໍ່ມີ. ຕົວເລືອກນີ້ເປີດຢູ່
ອັດຕະໂນມັດເມື່ອ ກ confmagic.h ໄຟລ໌ມີຢູ່ໃນໄດເລກະທໍລີລະດັບສູງສຸດ.
ພຽງແຕ່ເອົາໄຟລ໌ນັ້ນອອກຖ້າທ່ານຕ້ອງການປິດຕົວເລືອກນີ້ຢ່າງຖາວອນ.
-V ພິມໝາຍເລກລຸ້ນ ແລະອອກ.
TUTORIAL
ພາກສ່ວນ (ຍາວ) ນີ້ແມ່ນການແນະນໍາ metaconfig, ໃນທີ່ພວກເຮົາຈະຮຽນຮູ້ທັງຫມົດ
ພື້ນຖານ. ຖ້າເຈົ້າຮູ້ວິທີໃຊ້ແລ້ວ metaconfig, ທ່ານອາດຈະຂ້າມໄປອັນຕໍ່ໄປໄດ້ຢ່າງປອດໄພ
ສ່ວນ.
ພາບລວມ
ປົກກະຕິແລ້ວເມື່ອທ່ານຕ້ອງການເອົາຊຸດແຫຼ່ງບາງຢ່າງເພື່ອລວບລວມຢູ່ໃນເວທີທີ່ເຈົ້າມີ
ເພື່ອແກ້ໄຂ Makefile ຕົ້ນຕໍ (ສົມມຸດວ່າມີຫນຶ່ງ!), ເລືອກ C compiler, ໃຫ້ແນ່ໃຈວ່າທ່ານ
ມີຫ້ອງສະຫມຸດທີ່ເຫມາະສົມ, ແລະຫຼັງຈາກນັ້ນໄຟໄຫມ້ ເຮັດໃຫ້ ຄໍາສັ່ງ. ຖ້າຊຸດແມ່ນສົມເຫດສົມຜົນ
ຂຽນໄດ້ດີ, ມັນຈະລວບລວມ (ໂດຍບໍ່ມີການເຕືອນເປັນທາງເລືອກ :-). ໃນຕົວຂອງມັນເອງ, ສຸດທ້າຍ
ປະໂຫຍກແມ່ນການປະຕິບັດທີ່ແທ້ຈິງ, ເນື່ອງຈາກວ່າຄວາມຫລາກຫລາຍຂອງເວທີ UNIX ທີ່ມີຢູ່ໃນມື້ນີ້
ແລະຄວາມຫຼາກຫຼາຍຂອງລົດຊາດ, ນັ້ນຫມາຍຄວາມວ່າຜູ້ຂຽນຂອງຊຸດໄດ້ເຂົ້າໄປໃນເລິກ
ບັນຫາໃນການຄິດອອກທາງເລືອກທີ່ຖືກຕ້ອງໂດຍການທົດລອງມາດຕະຖານບາງຢ່າງ, ການຄາດເດົາແລະການ messing
ປະມານທີ່ມີລະບົບປະກອບມີແລະປະເພດ.
ຢ່າງໃດກໍຕາມ, ເຖິງວ່າຈະມີພອນສະຫວັນທັງຫມົດ, ຜູ້ຂຽນບໍ່ສາມາດຮູ້ວ່າບາງລະບົບມີ
ການເອີ້ນລະບົບທີ່ແຕກຫັກ, ຫຼືວ່າໂຄງສ້າງລະບົບບາງຢ່າງຂາດພາກສະຫນາມມາດຕະຖານອື່ນ, ຫຼື
ພຽງແຕ່ວ່າມີໄຟລ໌ທີ່ລະບຸໄວ້ຫຼືບໍ່. ແລະຂ້າພະເຈົ້າບໍ່ໄດ້ພິຈາລະນາ implicit ໄດ້
ສົມມຸດຕິຖານ, ເຊັ່ນ: ປະເພດທີ່ສົ່ງຄືນໂດຍ malloc () ຫນ້າທີ່ຫຼືການມີຂອງ
ປ່ຽນຊື່() ລະບົບໂທຫາຊື່ຈໍານວນຫນຶ່ງ. ແຕ່ຄວາມຮູ້ນັ້ນເປັນສິ່ງຈໍາເປັນເພື່ອບັນລຸຕົວຈິງ
ການເຄື່ອນທີ່.
ບັດນີ້ເຮົາບໍ່ໄດ້ລ່ວງລະເມີດຕົວເອງ. ການນໍາໃຊ້ຂໍ້ມູນນັ້ນຮຽກຮ້ອງໃຫ້ມີຄວາມສາມາດຫຼາຍກວ່າເກົ່າ, ແຕ່ມັນສາມາດເຮັດໄດ້
ເຮັດ ໃຫ້ ໂຄງ ການ Portable ຫຼາຍ ນັບ ຕັ້ງ ແຕ່ ມັນ ໄດ້ ຖືກ ລາຍ ລັກ ອັກ ສອນ ໃນ ຮູບ ແບບ ຂອງ ລະ ບົບ ເປັນ ເອ ກະ ລາດ
ແລະອີງໃສ່ພຽງແຕ່ຄວາມຈິງທີ່ວ່າສົມມຸດຕິຖານບາງຢ່າງເປັນຄວາມຈິງຫຼືຜິດໃນລະບົບສະເພາະໃດຫນຶ່ງ,
ແຕ່ລະສົມມຸດຕິຖານບໍ່ກ່ຽວຂ້ອງກັນ. ນັ້ນແມ່ນ, ພວກເຮົາບໍ່ໄດ້ເວົ້າວ່າ: ພວກເຮົາກໍາລັງຢູ່ໃນ
ລະບົບ BSD ຫຼືພວກເຮົາຢູ່ໃນລະບົບ USG. ອັນນັ້ນມັນໂງ່ເກີນໄປໃນທຸກວັນນີ້. ບໍ່, ພວກເຮົາຕ້ອງການ
ເວົ້າກັບລະຫັດແຫຼ່ງ: ລະບົບນີ້ບໍ່ມີ ປ່ຽນຊື່() ໂທລະບົບແລະ malloc ()
ສົ່ງຄືນ a (ໂມຄະ *) ມູນຄ່າ.
Metaconfig ເປັນເຄື່ອງມືທີ່ຈະຊ່ວຍໃຫ້ທ່ານເຮັດພຽງແຕ່ວ່າ, ມີຜົນປະໂຫຍດເພີ່ມເຕີມຂອງບໍ່ແມ່ນ
ຕ້ອງແກ້ໄຂ Makefile ດ້ວຍມືຖ້າທຸກຢ່າງດີ. ໂດຍການແລ່ນ metaconfig, ທ່ານສ້າງເປັນ
shell script ຊື່ ກໍາຫນົດຄ່າ. ຄວາມພະຍາຍາມຫຼາຍຢ່າງໄດ້ຖືກອຸທິດໃຫ້ກັບ script Configure
ພາຍໃນເພື່ອຮັບປະກັນວ່າມັນຈະດໍາເນີນການໃນ 99% ຂອງ shells ທີ່ມີຢູ່ໃນການນີ້
ການຂຽນ. Configure ຈະ probe ລະບົບເປົ້າຫມາຍ, ຖາມຄໍາຖາມໃນເວລາທີ່ສົງໃສແລະ
ຮວບຮວມຄໍາຕອບທັງຫມົດໃນໄຟລ໌ແກະດຽວ, ເຊິ່ງສາມາດຖືກນໍາໃຊ້ເພື່ອ
ສ້າງອັດຕະໂນມັດ Makefiles ແລະ C ປະກອບມີໄຟລ໌.
ມີພຽງແຕ່ຊຸດສັນຍາລັກທີ່ຈໍາກັດ (ແຕ່ຂ້ອນຂ້າງໃຫຍ່) ທີ່ມີຢູ່ສໍາລັບສະຄິບແກະຂອງທ່ານ
ແລະໂຄງການ C. ພວກມັນທັງໝົດຖືກບັນທຶກໄວ້ໃນເອກະສານຄຳສັບ. ສິ່ງທີ່ທ່ານຕ້ອງເຮັດແມ່ນຮຽນຮູ້
ກ່ຽວກັບພວກມັນ ແລະເລີ່ມນຳໃຊ້ພວກມັນເພື່ອແກ້ໄຂບັນຫາການເຄື່ອນທີ່ ແລະການຕັ້ງຄ່າ. ຈາກນັ້ນ,
ໂດຍການແລ່ນ metaconfig, script Configure ທີ່ເຫມາະສົມຈະຖືກສ້າງຂື້ນສໍາລັບຊຸດຂອງທ່ານ.
ສະຄຣິບ Configure ຖືກສ້າງຂຶ້ນຫຼາຍຫນ່ວຍ (ຫຼາຍກວ່າ 300), ແຕ່ລະຫນ່ວຍເປັນ
ຮັບຜິດຊອບໃນການກໍານົດຈໍານວນຂະຫນາດນ້ອຍຂອງ shell ແລະ / ຫຼືສັນຍາລັກ C. ຫນ່ວຍງານໄດ້ຖືກປະກອບ
ຮ່ວມກັນໃນຂັ້ນຕອນສຸດທ້າຍ, ໃຫ້ກຽດກັບເສັ້ນສະພາບການເພິ່ງພາອາໄສ (ຫນຶ່ງຫນ່ວຍງານອາດຈະຕ້ອງການຜົນໄດ້ຮັບ
ຂອງຫນ່ວຍງານອື່ນໆຈໍານວນຫນຶ່ງທີ່ວາງໄວ້ກ່ອນໃນ script).
ສັນຍາລັກ
ສັນຍາລັກແມ່ນສິ່ງທີ່ສໍາຄັນທີ່ສຸດໃນ metaconfig ໂລກ. ພວກເຂົາແມ່ນນ້ອຍທີ່ສຸດ
ນິຕິບຸກຄົນທີ່ຖືກຮັບຮູ້, ປົກກະຕິແລ້ວເປັນຄໍາ, ແລະສາມາດໄດ້ຮັບຄ່າໃນຕອນທ້າຍຂອງ Configure
ການປະຕິບັດ. ສໍາລັບຕົວຢ່າງ, ສັນຍາລັກຂອງຕົວປະມວນຜົນ C HAS_RENAME ເປັນ metaconfig ສັນຍາລັກວ່າ
ແມ່ນຮັບປະກັນທີ່ຈະກໍານົດຖ້າຫາກວ່າ, ແລະພຽງແຕ່ຖ້າຫາກວ່າ, ໄດ້ ປ່ຽນຊື່() ການໂທລະບົບມີຢູ່. ເຊັ່ນດຽວກັນ,
ໄດ້ $ranlib shell variable ຈະຖືກຕັ້ງເປັນ ':' ຫຼື 'ranlib' ຂຶ້ນກັບວ່າ
ໂທຫາໄດ້ ranlib ຕ້ອງການໂຄງການເພື່ອສັ່ງໄຟລ໌ຫ້ອງສະຫມຸດ. ວິທີການນີ້ເຮັດວຽກບໍ່ແມ່ນ
ສໍາຄັນສໍາລັບປັດຈຸບັນ, ສິ່ງທີ່ສໍາຄັນແມ່ນເພື່ອເຂົ້າໃຈວ່າສັນຍາລັກເຫຼົ່ານັ້ນແມ່ນໄດ້ຮັບ a ຊີວິດ
(ເຊັ່ນ: ຄ່າ) ຕາມ ກໍາຫນົດຄ່າ ການປະຫານຊີວິດ.
ການນໍາໃຊ້ສັນຍາລັກແມ່ນຂ້ອນຂ້າງກົງໄປກົງມາ. ໃນໄຟລ໌ແຫຼ່ງ C, ທ່ານພຽງແຕ່ໃຊ້ສັນຍາລັກ
ຄ່າ, ເປັນຄໍາສັ່ງກ່ອນໂປເຊດເຊີ (ຕົວຢ່າງ: #ifdef HAS_RENAME) ຫຼື, ຖ້າສັນຍາລັກ
ຄ່າແມ່ນສະຕຣິງ, ໂດຍກົງຕາມທີ່ເຈົ້າຈະໃຊ້ macro ໃນ C. ແລະໃນໄຟລ໌ shell ຫຼື a
Makefile, ທ່ານອາດຈະອ້າງເຖິງສັນຍາລັກຂອງຫອຍໂດຍກົງ.
ແທ້ຈິງແລ້ວ, ຂ້ອຍເວົ້າຕົວະ, ເພາະວ່ານັ້ນບໍ່ແມ່ນຄວາມມະຫັດສະຈັນຄືກັບວັກທີ່ຜ່ານມາ
ສາມາດສຽງ. ໃນໄຟລ໌ C, ທ່ານຈໍາເປັນຕ້ອງປະກອບ Configure-produced config.h ໄຟລ໌, ແລະ
ທ່ານຕ້ອງຫໍ່ Shell script ຫຼື Makefile ຂອງທ່ານໃນໄຟລ໌ .SH ແລະທ່ານອາດຈະອ້າງເຖິງ shell
ສັນຍາລັກພຽງແຕ່ໃນພາກສ່ວນການທົດແທນຕົວປ່ຽນແປງຂອງໄຟລ໌ .SH ນັ້ນ. ເພີ່ມເຕີມກ່ຽວກັບເລື່ອງນີ້ຕໍ່ມາ.
ແຫຼ່ງຂໍ້ມູນ ໄຟ
ສັນຍາລັກອາດຈະປາກົດຢູ່ໃນຊຸດໄຟລ໌ແຫຼ່ງທີ່ຈໍາກັດເທົ່ານັ້ນ, ເພາະວ່າ metaconfig ພຽງແຕ່ຈະ
ສະແກນເຫຼົ່ານັ້ນໃນເວລາທີ່ຊອກຫາສັນຍາລັກທີ່ຮູ້ຈັກ, ພະຍາຍາມຊອກຫາວ່າຫນ່ວຍໃດມັນຈະຕ້ອງການ.
ທ່ານອາດຈະໃຊ້ສັນຍາລັກ C ໃນໄຟລ໌ແຫຼ່ງ C, ເຊັ່ນໄຟລ໌ທີ່ມີ a .c, .h, .y or .l ການຂະຫຍາຍ, ແລະ
ສັນຍາລັກຂອງແກະແມ່ນຊອກຫາຢູ່ໃນໄຟລ໌ .SH ເທົ່ານັ້ນ.
ເພື່ອໃຫ້ໄດ້ຮັບມູນຄ່າຂອງສັນຍາລັກ, ໄຟລ໌ C ຈໍາເປັນຕ້ອງປະກອບມີພິເສດ config.h
ໄຟລ໌, ເຊິ່ງຜະລິດໂດຍ ກໍາຫນົດຄ່າ ເມື່ອມີສັນຍາລັກ C. ແລະໄຟລ໌ .SH ແມ່ນດໍາເນີນການ
ຜ່ານແກະ, ການຜະລິດໄຟລ໌ໃຫມ່. ຢ່າງໃດກໍຕາມ, ໃນສ່ວນເທິງຂອງໄຟລ໌ .SH, ໄດ້
ພິເສດ config.sh ໄຟລ໌ (ຍັງຜະລິດໂດຍການແລ່ນ ກໍາຫນົດຄ່າ) ແມ່ນແຫຼ່ງ, ແລະຕົວແປ
ມີການປ່ຽນແທນ. ຕົວຈິງແລ້ວ, config.h ແມ່ນຜະລິດໂດຍການແລ່ນ metaconfigຜະລິດ
config_h.SH ໄຟລ໌, ອີກເທື່ອຫນຶ່ງໂດຍໃຊ້ຕົວປ່ຽນແທນ. ດັ່ງນັ້ນພວກເຮົາຈະເບິ່ງວ່າ a
ໃກ້ຊິດເລັກນ້ອຍເພາະວ່ານີ້ແມ່ນຫົວໃຈຂອງທັງຫມົດ configuration ໂຄງການ...
ການປ່ຽນແປງ ປ່ຽນແທນ
ມີການກໍ່ສ້າງຫອຍເອີ້ນວ່າ ທີ່ນີ້ ເອກະສານ ເຊິ່ງເຮັດໃຫ້ຄໍາສັ່ງທີ່ຈະເອົາການປ້ອນຂໍ້ມູນ
ລະບຸໄວ້ພາຍໃນສະຄຣິບເອງ. ວັດສະດຸປ້ອນນັ້ນຖືກຕີຄວາມໝາຍໂດຍແກະເປັນສອງ
ສະຕຣິງອ້າງອີງ ຫຼືສະຕຣິງທີ່ຍົກມາອັນດຽວ ຂຶ້ນກັບຮູບແບບຂອງເອກະສານຢູ່ທີ່ນີ້
ຂໍ້ ກຳ ນົດ.
ເພື່ອລະບຸເອກະສານຢູ່ທີ່ນີ້, ໂທເຄັນ '<<' ຖືກໃຊ້, ຕິດຕາມດ້ວຍຕົວລະບຸຕົວດຽວ. ຈາກ
ຫຼັງຈາກນັ້ນ, ເສັ້ນ script ທີ່ຍັງເຫຼືອປະກອບເປັນ input ສໍາລັບຄໍາສັ່ງ, ຈົນກ່ວາທີ່ນີ້
ເອກະສານຖືກພົບເຫັນຢູ່ໃນເສັ້ນດ້ວຍຕົວມັນເອງ. ການທົດແທນ Shell (ລວມທັງຕົວແປຂອງ shell
ການທົດແທນ) ແມ່ນເຮັດໄດ້ເວັ້ນເສຍແຕ່ວ່າຕົວລະບຸຈະຖືກອ້ອມຮອບດ້ວຍວົງຢືມດຽວ. ຕົວຢ່າງ:
var='ທຳອິດ'
tar='ວິນາທີ'
echo "--> ທໍາອິດທີ່ນີ້ເອກະສານ:"
cat <
var='$var'
tar='$tar'
OEM
echo "--> ເອກະສານທີສອງທີ່ນີ້:"
cat <<'EOM'
ສະທ້ອນ $var
ສະທ້ອນ $tar
OEM
echo "--> ສິ້ນສຸດ."
ຈະຜະລິດ, ເມື່ອແລ່ນຜ່ານແກະ:
--> ທໍາອິດທີ່ນີ້ເອກະສານ:
var='ທຳອິດ'
tar='ວິນາທີ'
--> ເອກະສານທີສອງຢູ່ທີ່ນີ້:
ສະທ້ອນ $var
ສະທ້ອນ $tar
--> ສິ້ນສຸດ.
ເອກະສານທໍາອິດຢູ່ທີ່ນີ້ມີເນື້ອໃນຂອງມັນຕີຄວາມໃນຂະນະທີ່ເອກະສານທີສອງແມ່ນຜົນຜະລິດຕາມທີ່ເປັນຢູ່.
ທັງສອງມີປະໂຫຍດໃນ .SH script, ດັ່ງທີ່ພວກເຮົາກໍາລັງຈະເຫັນ.
ການນໍາໃຊ້ .SH Scripts
A .SH script ປົກກະຕິແລ້ວແມ່ນຜະລິດໂດຍການແລ່ນ the ເຮັດໃຫ້SH script ໄຟລ໌ທີ່ມີຢູ່ແລ້ວ,
ການປ່ຽນແປງ ເອກະສານ into a file.SH. ໃຫ້ເຮົາໃຊ້ຕົວຢ່າງດຽວ. ນີ້ແມ່ນ script ນ້ອຍ
(ໃຫ້ໂທຫາມັນ ຂະໜາດ) ທີ່ພິມຂໍ້ຄວາມດຽວ, ຂະຫນາດຂອງ int ປະເພດຂໍ້ມູນໃນ C.
ແຕ່ຫນ້າເສຍດາຍ, ມັນມີມູນຄ່າ hardwired ໃນມັນ, ດັ່ງນັ້ນ:
#!/ ຖັງ / sh
intsize='4'
echo "ໃນເຄື່ອງນີ້, ປະເພດ int ແມ່ນ $intsize bytes"
ໃຫ້ແລ່ນ ເຮັດໃຫ້SH ໃສ່ມັນໂດຍການພິມ 'ເຮັດໃຫ້SH ຂະໜາດ'. ພວກເຮົາໄດ້ຮັບອັນດຽວ intsize.SH file ທີ່
ເບິ່ງຄືແນວນີ້:
ກໍລະນີ $CONFIG ໃນ
'')
ຖ້າທົດສອບ -f config.sh; ຈາກນັ້ນ TOP=.;
elif ການທົດສອບ -f ../config.sh ; ແລ້ວ TOP=..;
elif ການທົດສອບ -f ../../config.sh ; ແລ້ວ TOP=../ ..;
elif ການທົດສອບ -f ../../../config.sh ; ແລ້ວ TOP=../../..;
elif ການທົດສອບ -f ../../../../config.sh ; ແລ້ວ TOP=../../../..;
ອື່ນ
echo "ບໍ່ສາມາດຊອກຫາ config.sh."; ທາງອອກ 1
fi
. $TOP/config.sh
;;
ວ່າ C
: ນີ້ບັງຄັບໄຟລ໌ SH ເພື່ອສ້າງເປົ້າຫມາຍໃນໄດເລກະທໍລີດຽວກັນກັບໄຟລ໌ SH.
: ນີ້ແມ່ນເພື່ອໃຫ້ການເພິ່ງພາອາໄສສະເຫມີຮູ້ບ່ອນທີ່ຈະຊອກຫາ SH derivatives.
ກໍລະນີ "$ 0" ໃນ
*/*) cd `expr X$0 : 'X\.*\)/'` ;;
ວ່າ C
echo "ສະກັດ intsize (ມີການປ່ຽນແທນຕົວແປ)"
: ພາກສ່ວນນີ້ຂອງໄຟລ໌ຈະມີການປ່ຽນຕົວແປທີ່ເຮັດໄດ້ໃນມັນ.
: ຍ້າຍອັນໃດກໍໄດ້ທີ່ຕ້ອງການ config subs ຈາກ !NO!SUBS! ພາກສ່ວນ !GROK!ນີ້!.
: ປົກປ້ອງສັນຍານເງິນໂດລາ ແລະ backticks ທີ່ທ່ານບໍ່ຕ້ອງການຕີຄວາມໝາຍ
: ໂດຍການວາງ backslash ຢູ່ທາງຫນ້າ. ເຈົ້າສາມາດລຶບຄຳເຫັນເຫຼົ່ານີ້ໄດ້.
$spitshell >intsize <
$startsh
!ດີ!ນີ້!
: ໃນໂດລາຕໍ່ໄປນີ້ແລະ backticks ບໍ່ຈໍາເປັນຕ້ອງ backslash ພິເສດ.
$spitshell >>intsize <<'!NO!SUBS!'
intsize='4'
echo "ໃນເຄື່ອງນີ້, ປະເພດ int ແມ່ນ $intsize bytes"
!ບໍ່!ສະໝັກ!
chmod 755 intsize
$euicefix intsize
ສ່ວນທໍາອິດຂອງ script ນີ້ (ໃນ ກໍລະນີ ຖະແຫຼງການ) ກໍາລັງພະຍາຍາມຊອກຫາສະຖານທີ່ config.sh
ໄຟລ໌, ໃນຄໍາສັ່ງທີ່ຈະແຫຼ່ງມັນ. ໄດ້ $CONFIG ຕົວແປແມ່ນ false ໂດຍຄ່າເລີ່ມຕົ້ນ, ໂດຍ true ເມື່ອ
config.sh ໄດ້ມາແລ້ວ (ຊຶ່ງຈະເປັນກໍລະນີຖ້າຫາກວ່າໄຟລ໌ນີ້ໄດ້ຖືກປະຕິບັດຈາກ
ພາຍໃນ ກໍາຫນົດຄ່າ ຕົວຂອງມັນເອງ, ແຕ່ບໍ່ໃຫ້ confuse ບັນຫາທີ່ນີ້).
ເມື່ອໃດ config.sh ໄຟລ໌ແມ່ນແຫຼ່ງ, ສັນຍາລັກ shell ທັງຫມົດທີ່ກໍານົດໂດຍ ກໍາຫນົດຄ່າ ມີ
ຕັ້ງ. ພວກເຮົາຮູ້ວ່າສາມາດບັນລຸຄໍາຖະແຫຼງການກໍລະນີທີສອງ, ໃຊ້ເພື່ອປ່ຽນບັນຊີປະຈຸບັນຄວນຈະເປັນ
ເສັ້ນທາງຖືກໃຊ້ເພື່ອເຂົ້າຫາໂຄງການນີ້ (ຕົວຢ່າງຖ້າພວກເຮົາເວົ້າວ່າ 'sh ../scripts/intsize.SH', ພວກເຮົາ
ທໍາອິດຈະແລ່ນ 'cd ../scripts' ກ່ອນທີ່ຈະສືບຕໍ່). ຖ້າເຈົ້າບໍ່ເຂົ້າໃຈເລື່ອງນີ້, ຢ່າເຮັດ
ກັງວົນກ່ຽວກັບມັນ.
ມານີ້ສິ່ງທີ່ໜ້າສົນໃຈ. script ນີ້ໃຊ້ $spitshell ຕົວແປ, ແລະມັນບໍ່ແມ່ນ
ບາງສິ່ງບາງຢ່າງທີ່ພວກເຮົາຮູ້ກ່ຽວກັບ ... ຍັງ. ຖ້າຫາກທ່ານເບິ່ງໂດຍຜ່ານໄຟລ໌ຄໍາສັບ, ທ່ານຈະເຫັນວ່າ
ນີ້ແມ່ນຕົວແປທີ່ຮູ້ຈັກໂດຍ metaconfig. ຖ້າທ່ານເຮັດໃຫ້ໄຟລ໌ນີ້ເປັນສ່ວນຫນຶ່ງຂອງການແຈກຢາຍຂອງທ່ານ
(ໂດຍການລວມເອົາມັນຢູ່ໃນໄຟລ໌ MANIFEST.new, ພວກເຮົາຈະກັບໄປທີ່ນັ້ນໃນພາຍຫຼັງ) ແລະດໍາເນີນການ
metaconfig, ຫຼັງຈາກນັ້ນ ກໍາຫນົດຄ່າ script ຈະກໍານົດຄ່າທີ່ເຫມາະສົມສໍາລັບຕົວແປນີ້
ແລະມັນຈະຖືກຕັ້ງຢູ່ໃນ config.sh. ຄືກັນສໍາລັບ $startsh ແລະຄວາມລຶກລັບ $euicefix at
ຈົບ. ໃນລະບົບທີ່ສົມເຫດສົມຜົນ, ພາກສ່ວນທີ່ກ່ຽວຂ້ອງຂອງ config.sh ຈະເບິ່ງຄືນີ້:
spitshell='ແມວ'
startsh='#!/ ຖັງ / sh'
euicefix=':'
ອ້າວ! ພວກເຮົາກໍາລັງໄປຮອດ. ໃນປັດຈຸບັນມັນເບິ່ງຄືວ່າຄຸ້ນເຄີຍ. ພວກເຮົາກໍາລັງປະເຊີນກັບຄົນດຽວ cat ຄໍາສັ່ງຂອງໃຜ
ການປ້ອນຂໍ້ມູນມາຈາກເອກະສານທີ່ປ່ຽນແປງໄດ້-interpolated ຢູ່ທີ່ນີ້ ແລະຜົນຜະລິດຂອງມັນຖືກໂອນໄປຫາ
ຂະໜາດ. ມູນຄ່າຈະເປັນຂອງ $startsh, ie '#!/ ຖັງ / sh'. ດີມາເຖິງຕອນນັ້ນ.
ຫຼັງຈາກນັ້ນ, ພວກເຮົາໄປເຖິງການຂະຫຍາຍເອກະສານທີ່ສອງທີ່ນີ້, ເພື່ອໃຫ້ໄດ້ຮັບສ່ວນທີ່ເຫຼືອຂອງ script ໄດ້. ນີ້
ທີ່ໃຊ້ເວລາ, ສັນຍາລັກເອກະສານທີ່ນີ້ແມ່ນອ້ອມຮອບໄປດ້ວຍວົງຢືມດຽວດັ່ງນັ້ນເນື້ອໃນຈະເປັນ
ເພີ່ມເຕີມ verbatim ກັບ ຂະໜາດ ໄຟລ໌. ດັ່ງນັ້ນ, ໂດຍການແລ່ນ 'sh intsize.SH', ພວກເຮົາໄດ້ຮັບ
ຜົນຜະລິດດັ່ງຕໍ່ໄປນີ້:
ການສະກັດເອົາຂະໜາດ (ດ້ວຍການປ່ຽນແທນຕົວແປ)
ແລະໂດຍການເບິ່ງໄຟລ໌ intsize ທີ່ຜະລິດ, ພວກເຮົາເບິ່ງ:
#!/ ຖັງ / sh
intsize='4'
echo "ໃນເຄື່ອງນີ້, ປະເພດ int ແມ່ນ $intsize bytes"
ຊຶ່ງເປັນສິ່ງທີ່ພວກເຮົາມີຢູ່ໃນຕອນຕົ້ນ. ມາຮອດປະຈຸບັນ, ມັນເປັນຂັ້ນຕອນທີ່ບໍ່ມີການດໍາເນີນງານ ...
ແຕ່, ວິເສດ! ມັນເກີດຂຶ້ນດັ່ງນັ້ນ (ບັງເອີນອັນບໍລິສຸດ, ເຊື່ອຂ້ອຍ!), ວ່າ metaconfig ຮູ້ຈັກ
ກ່ຽວກັບ $intsize ສັນຍາລັກຫອຍ. ໂດຍການຍ້າຍການເລີ່ມຕົ້ນຂອງ intsize ໄປຫາຕົວແປ-
interpolated ພື້ນທີ່ຂອງ .SH script ແລະເລີ່ມຕົ້ນມັນດ້ວຍ ກໍາຫນົດຄ່າ- ມູນຄ່າການຄິດໄລ່,
ແລະການຖອນຄໍາເຫັນທີ່ບໍ່ມີປະໂຫຍດໃນປັດຈຸບັນທີ່ເພີ່ມໂດຍ ເຮັດໃຫ້SH, ພວກເຮົາໄດ້ຮັບ:
ກໍລະນີ $CONFIG ໃນ
'')
ຖ້າທົດສອບ -f config.sh; ຈາກນັ້ນ TOP=.;
elif ການທົດສອບ -f ../config.sh ; ແລ້ວ TOP=..;
elif ການທົດສອບ -f ../../config.sh ; ແລ້ວ TOP=../ ..;
elif ການທົດສອບ -f ../../../config.sh ; ແລ້ວ TOP=../../..;
elif ການທົດສອບ -f ../../../../config.sh ; ແລ້ວ TOP=../../../..;
ອື່ນ
echo "ບໍ່ສາມາດຊອກຫາ config.sh."; ທາງອອກ 1
fi
. $TOP/config.sh
;;
ວ່າ C
ກໍລະນີ "$ 0" ໃນ
*/*) cd `expr X$0 : 'X\.*\)/'` ;;
ວ່າ C
echo "ສະກັດ intsize (ມີການປ່ຽນແທນຕົວແປ)"
$spitshell >intsize <
$startsh
intsize='$intsize'
!ດີ!ນີ້!
$spitshell >>intsize <<'!NO!SUBS!'
echo "ໃນເຄື່ອງນີ້, ປະເພດ int ແມ່ນ $intsize bytes"
!ບໍ່!ສະໝັກ!
chmod 755 intsize
$euicefix intsize
ແນ່ນອນ, ການໃຊ້ script ນີ້ຜ່ານ shell ອີກເທື່ອຫນຶ່ງຈະອອກ script ດຽວກັນ. ແຕ່ຖ້າ
ພວກເຮົາແລ່ນ ກໍາຫນົດຄ່າ ໃນເຄື່ອງທີ່ int ຖືກເກັບຮັກສາໄວ້ເປັນປະລິມານ 64 bits, config.sh ຈະ
ທີ່ກໍານົດໄວ້ ຂະໜາດ ເຖິງ 8 ແລະ ຂະໜາດ script ຈະຮັບຜິດຊອບຄ່າທີ່ຖືກຕ້ອງແລະພິມ:
ໃນເຄື່ອງນີ້, ປະເພດ int ແມ່ນ 8 bytes
ເຊິ່ງຖືກຕ້ອງ. ຊົມເຊີຍ! ພວກເຮົາພຽງແຕ່ໄດ້ກໍານົດຄ່າສະຄຣິບ Shell !!
ການຜະລິດ config.h
ດຽວນີ້ພວກເຮົາສາມາດເບິ່ງທາງໄດ້ config.h ແມ່ນຜະລິດອອກຈາກ config_h.SH. ພວກເຮົາຮູ້ວ່າ
ການເຮັດວຽກ ກໍາຫນົດຄ່າ ຜະລິດກ config.sh script (ເຮັດແນວໃດແທ້ນີ້ແມ່ນເຮັດບໍ່ໄດ້ຢ່າງເຂັ້ມງວດ
ທີ່ກ່ຽວຂ້ອງຢູ່ທີ່ນີ້, ແຕ່ສໍາລັບ curious, ມັນເປັນການທົດແທນເອກະສານອື່ນພາຍໃນ
ກໍາຫນົດຄ່າ ຕົວຂອງມັນເອງ). ໄດ້ config_h.SH ຕົວຂອງມັນເອງຖືກສ້າງຂຶ້ນໂດຍ metaconfig ໃນເວລາດຽວກັນ
ກໍາຫນົດຄ່າ ແມ່ນ, ສະຫນອງໃຫ້ທ່ານໃຊ້ຢ່າງຫນ້ອຍຫນຶ່ງສັນຍາລັກ C ພາຍໃນແຫຼ່ງຂອງທ່ານ.
ຂໍໃຫ້ເບິ່ງແບບສຸ່ມ config_h.SH ໄຟລ໌ເພື່ອເບິ່ງສິ່ງທີ່ເກີດຂຶ້ນແທ້ໆ:
ກໍລະນີ $CONFIG ໃນ
'')
ຖ້າທົດສອບ -f config.sh; ຈາກນັ້ນ TOP=.;
elif ການທົດສອບ -f ../config.sh ; ແລ້ວ TOP=..;
elif ການທົດສອບ -f ../../config.sh ; ແລ້ວ TOP=../ ..;
elif ການທົດສອບ -f ../../../config.sh ; ແລ້ວ TOP=../../..;
elif ການທົດສອບ -f ../../../../config.sh ; ແລ້ວ TOP=../../../..;
ອື່ນ
echo "ບໍ່ສາມາດຊອກຫາ config.sh."; ທາງອອກ 1
fi
. $TOP/config.sh
;;
ວ່າ C
ກໍລະນີ "$ 0" ໃນ
*/*) cd `expr X$0 : 'X\.*\)/'` ;;
ວ່າ C
echo "ສະກັດ config.h (ມີການປ່ຽນແທນຕົວແປ)"
sed < config.h -e 's!^#undef!/define!' -e's!^#un-def!#undef!'
/*
* ໄຟລ໌ນີ້ຖືກຜະລິດໂດຍການແລ່ນ script config_h.SH, ເຊິ່ງ
* ໄດ້ຮັບຄ່າຂອງມັນຈາກ config.sh, ເຊິ່ງໂດຍທົ່ວໄປແມ່ນຜະລິດໂດຍ
* ແລ່ນ Configure.
*
* ຮູ້ສຶກວ່າຟຣີທີ່ຈະປັບປຸງແກ້ໄຂໃດໆຂອງນີ້ຕາມຄວາມຕ້ອງການເກີດຂຶ້ນ. ຫມາຍເຫດ, ຢ່າງໃດກໍຕາມ,
* ທີ່ແລ່ນ config.h.SH ອີກເທື່ອຫນຶ່ງຈະລົບລ້າງການປ່ຽນແປງໃດໆທີ່ທ່ານໄດ້ເຮັດ.
* ສໍາລັບການປ່ຽນແປງທີ່ຖາວອນກວ່າ ແກ້ໄຂ config.sh ແລະ rerun config.h.SH.
*/
/* ເວລາການຕັ້ງຄ່າ: $cf_time
* ຕັ້ງຄ່າໂດຍ: $cf_by
* ລະບົບເປົ້າໝາຍ: $myuname
*/
#ifndef _config_h_
#define _config_h_
/* ສຳເນົາ:
* ສັນຍາລັກນີ້ແມ່ນມີແຜນທີ່ memcpy ຖ້າຫາກວ່າ bcopy() routine ບໍ່ແມ່ນ
* ມີໃຫ້ສໍາເນົາສາຍ.
*/
/* HAS_BCOPY:
* ສັນຍາລັກນີ້ໄດ້ຖືກກໍານົດຖ້າຫາກວ່າ bcopy() routine ມີໃຫ້
* ສໍາເນົາຕັນຂອງຄວາມຊົງຈໍາ. ທ່ານບໍ່ຄວນໃຊ້ສັນຍາລັກນີ້ພາຍໃຕ້
* ສະຖານະການປົກກະຕິແລະໃຊ້ bcopy() ໂດຍກົງແທນ, ເຊິ່ງ
* ຈະໄດ້ຮັບການສ້າງແຜນທີ່ memcpy() ຖ້າຫາກວ່າ bcopy ບໍ່ມີ.
*/
#$d_bcopy HAS_BCOPY /**/
#ifndef HAS_BCOPY
#ifdef bcopy
#un-def bcopy
#ສຸດທ້າຍ
#define bcopy(s,d,l) memcpy((d),(s),(l)) /* mapped to memcpy */
#ສຸດທ້າຍ
/* HAS_DUP2:
* ສັນຍາລັກນີ້, ຖ້າຫາກວ່າກໍານົດ, ສະແດງໃຫ້ເຫັນວ່າ dup2 routine ແມ່ນ
* ມີໃຫ້ຊໍ້າກັນກັບຕົວອະທິບາຍໄຟລ໌.
*/
#$d_dup2 HAS_DUP2 /**/
/* I_STRING:
* ສັນຍາລັກນີ້, ຖ້າຫາກວ່າກໍານົດ, ສະແດງໃຫ້ເຫັນກັບໂຄງການ C ທີ່ມັນຄວນຈະ
* ປະກອບມີ (ລະບົບ USG) ແທນ (ລະບົບ BSD).
*/
#$i_string I_STRING /**/
#ສຸດທ້າຍ
!ດີ!ນີ້!
ຢູ່ເທິງສຸດຂອງໄຟລ໌, ພວກເຮົາຮັບຮູ້ມາດຕະຖານການກໍ່ສ້າງ .SH ທີ່ພວກເຮົາມີຢູ່ແລ້ວ
ໄດ້ສຶກສາຢ່າງລະອຽດ. ຕໍ່ໄປແມ່ນການສະກັດເອົາໄຟລ໌ຕົວມັນເອງ, ຜ່ານເອກະສານທີ່ນີ້
ການປ່ຽນແທນຕົວແປ. ຢ່າງໃດກໍຕາມ, ໃນທີ່ນີ້ພວກເຮົາບໍ່ໄດ້ໃຊ້ທົ່ງພຽງ cat ເປົ້າ ໝາຍ ມີ sed ແທນທີ່ຈະ, ນັບຕັ້ງແຕ່
ພວກເຮົາຈໍາເປັນຕ້ອງໄດ້ແກ້ໄຂບາງຢ່າງເພີ່ມເຕີມກ່ຽວກັບການບິນ. ພວກເຮົາຈະເບິ່ງວ່າເປັນຫຍັງຕໍ່ມາ, ສະນັ້ນໃຫ້ພວກເຮົາລືມ
ກ່ຽວກັບມັນໃນປັດຈຸບັນ.
ໃນປັດຈຸບັນພວກເຮົາສາມາດບັນລຸຄໍາຄິດເຫັນນໍາ, ແລະໄຟລ໌ໄດ້ຖືກ tagged ກັບເວລາການຕັ້ງຄ່າ, ໄດ້
ລະບົບເປົ້າໝາຍ, ແລະອື່ນໆ... (ຕົວແປເຫຼົ່ານັ້ນມາຈາກແຫຼ່ງທີ່ມາ config.sh ໄຟລ໌ໄດ້
ສ້າງຕັ້ງຂຶ້ນໂດຍ ກໍາຫນົດຄ່າ). ສ່ວນຫົວຄຳເຫັນນັ້ນແມ່ນຕິດຕາມດ້ວຍການປົກປ້ອງ '#ifndef' ເພື່ອປ້ອງກັນ
ຕໍ່ກັບການລວມເອົາຫຼາຍໄຟລ໌ນີ້. ແລ້ວຫົວໃຈຂອງໄຟລ໌ມາ...
ມັນຊ່ວຍໃຫ້ຮູ້ວ່າ $d_* ແລະ $i_* ຕົວແປຖືກຕັ້ງເປັນ 'ກໍານົດ'ຫຼື 'undef'ໂດຍ
ກໍາຫນົດຄ່າ, ຂຶ້ນກັບວ່າຟັງຊັນຫຼືໄຟລ໌ລວມຢູ່ໃນລະບົບຫຼື
ບໍ່. ນັ້ນ ໝາຍ ຄວາມວ່າ:
#$d_bcopy HAS_BCOPY /**/
ສາຍຈະຖືກຂະຫຍາຍເປັນ:
#ກຳນົດ HAS_BCOPY /**/
ຖ້າຕົວແປ $d_bcopy ຖືກຕັ້ງເປັນ 'define' ຫຼື:
#undef HAS_BCOPY /**/
ຖ້າ $d_bcopy ຖືກຕັ້ງເປັນ 'undef', ເພາະວ່າຄຸນສົມບັດບໍ່ໄດ້ຢູ່ທີ່ນັ້ນ. ຢ່າງໃດກໍຕາມ, ມັນບໍ່ແມ່ນ
ສິ່ງທີ່ຂຽນຢູ່ໃນ config.h ໄຟລ໌ເນື່ອງຈາກວ່າ sed ການກັ່ນຕອງທີ່ພວກເຮົາໄດ້ເຫັນແລ້ວ,
ເຊິ່ງຈະປ່ຽນຮູບແບບທີສອງເປັນ:
/*#define HAS_BCOPY /**/
ນັ້ນແມ່ນແບບຟອມທີ່ມີປະໂຫຍດສໍາລັບການດັດແກ້ຕໍ່ມາ config.h ເນື່ອງຈາກວ່າທ່ານພຽງແຕ່ຕ້ອງການທີ່ຈະເອົາອອກ
ນຳໜ້າ '/*' ຖ້າເຈົ້າຕ້ອງການລົບລ້າງ ກໍາຫນົດຄ່າທາງເລືອກຂອງ. ເຊັ່ນດຽວກັນ, ທ່ານອາດຈະເພີ່ມອັນດຽວ
'/*' ໃນຕອນຕົ້ນຂອງເສັ້ນ '#define' ເພື່ອຫຼີກເວັ້ນການນິຍາມຂອງສັນຍາລັກສະເພາະ.
ນີ້ແມ່ນເຫດຜົນທີ່ວ່າແຕ່ລະຄໍານິຍາມຂອງສັນຍາລັກແມ່ນຖືກປົກປ້ອງໂດຍ '/**/', ເພື່ອປິດຕົວນໍາ
ຄຳເຫັນເປີດໂດຍ '/*' (ຄຳຄິດເຫັນບໍ່ໄດ້ຕິດຢູ່ໃນ C).
ດຽວນີ້ການປ່ຽນ '#undef' ເປັນ '/*#define' ແມ່ນດີ, ແຕ່ຖ້າພວກເຮົາຕ້ອງການຂຽນຕົວຈິງ.
'#undef', ພວກເຮົາຕິດຢູ່ ... ເວັ້ນເສຍແຕ່ວ່າພວກເຮົາຂຽນມັນເປັນ '#un-def' ແລະປ່ອຍໃຫ້ sed ແກ້ໄຂມັນເປັນ '#undef'
ໃນຂະນະທີ່ການຜະລິດ config.h, ຊຶ່ງເປັນສິ່ງທີ່ເຮັດຕົວຈິງຢູ່ທີ່ນີ້.
ປະເພດຂອງເຫດຜົນດຽວກັນໃຊ້ກັບສອງແຖວນັ້ນ:
#$d_dup2 HAS_DUP2 /**/
#$i_string I_STRING /**/
ແລະສົມມຸດຕິຖານ config.sh ນິຍາມ:
d_dup2='ກຳນົດ'
i_string='undef'
ພວກເຮົາຈະໄດ້ຮັບການຜະລິດໄດ້ config.h:
#ກຳນົດ HAS_DUP2 /**/
/*#define I_STRING /**/
ສະອາດຄືນ້ຳໄຫຼບໍ? ດີ!
ໃນປັດຈຸບັນມັນຄວນຈະເຫັນໄດ້ຊັດເຈນວ່າໂດຍການລວມເອົາ config.h ໃນໄຟລ໌ແຫຼ່ງ C ຂອງທ່ານທັງຫມົດ, ທ່ານໄດ້ຮັບ
ຮູ້ຫຍັງ ກໍາຫນົດຄ່າ ໄດ້ຄາດເດົາກ່ຽວກັບລະບົບຂອງທ່ານ. ໃນຄວາມເປັນຈິງ, ໂດຍໃຊ້ສັນຍາລັກເຫຼົ່ານັ້ນ, ເຈົ້າແມ່ນ
ການຂຽນລະຫັດ C ທີ່ຖືກຕັ້ງຄ່າ, ນັບຕັ້ງແຕ່ metaconfig ຈະຮູ້ວ່າທ່ານຕ້ອງການສັນຍາລັກເຫຼົ່ານັ້ນແລະຈະ
ສ້າງທີ່ເຫມາະສົມ config_h.SH ໄຟລ໌ເຊັ່ນດຽວກັນກັບລະຫັດທີ່ຈໍາເປັນທັງຫມົດໃນ ກໍາຫນົດຄ່າ to
ຄິດໄລ່ຄ່າທີ່ເຫມາະສົມສໍາລັບພວກເຂົາ (ໂດຍການກໍານົດຄ່າທີ່ກ່ຽວຂ້ອງກັບຕົວແປ shell).
ເຮັດວຽກ Metaconfig
ໃຫ້ຂອງສຸມໃສ່ການ metaconfig ໂຄງການສໍາລັບການໃນຂະນະທີ່ຈະເຂົ້າໃຈວິທີການນໍາໃຊ້ຫົວຫນ່ວຍຂອງຕົນແລະ
ລະຫັດແຫຼ່ງຂອງທ່ານເພື່ອຜະລິດໄຟລ໌ການຕັ້ງຄ່າທີ່ຈໍາເປັນທັງຫມົດ. ຖ້າເຈົ້າຕັ້ງໃຈຂຽນໃໝ່
ຫນ່ວຍງານ, ທ່ານຄວນມີຄວາມເຂົ້າໃຈດີກ່ຽວກັບໂຄງການທັງຫມົດ.
ຖ້າບໍ່ມີໄຟລ໌ MANIFEST.new, metaconfig ຈະພະຍາຍາມໃຊ້ໄຟລ໌ MANIFEST ແທນ,
ເພື່ອຄວາມສະດວກ. ຢູ່ທຸກບ່ອນທີ່ພວກເຮົາກ່າວເຖິງ MANIFEST.new, ມັນສາມາດເຂົ້າໃຈໄດ້ວ່າ MANIFEST
ສະຫນອງໃຫ້ບໍ່ມີໄຟລ໌ MANIFEST.new ທີ່ພົບເຫັນຢູ່ໃນຮາກຂອງຊຸດຂອງທ່ານ.
ສົມມຸດວ່າໄຟລ໌ MANIFEST.new ຂອງທ່ານຖືກຕັ້ງຢ່າງຖືກຕ້ອງ ແລະລາຍຊື່ໄຟລ໌ຕົ້ນສະບັບທັງໝົດທີ່ທ່ານຕ້ອງການ
configure, ແລະທີ່ທ່ານໄດ້ດໍາເນີນການ ຊອງ ໃນໄດເລກະທໍລີແຫຼ່ງຮາກຂອງເຈົ້າເພື່ອສ້າງ a
. ກະເປົາ ໄຟລ໌, ທ່ານອາດຈະດໍາເນີນການ metaconfig ແລະທ່ານຈະໄດ້ຮັບດັ່ງຕໍ່ໄປນີ້:
$ metaconfig
ກຳລັງຊອກຫາຫົວໜ່ວຍ...
ສະກັດລາຍຊື່ຜູ້ເພິ່ງພາອາໄສ 312 ໜ່ວຍ...
ກຳລັງສະກັດຊື່ໄຟລ໌ (*.[chyl] ແລະ *.SH) ຈາກ MANIFEST.new...
ການສ້າງໄຟລ໌ທີ່ຕ້ອງການ...
ກຳລັງສະແກນໄຟລ໌ .[chyl] ສຳລັບສັນຍາລັກ...
ກຳລັງສະແກນໄຟລ໌ .SH ສຳລັບສັນຍາລັກ...
ກຳລັງຄິດໄລ່ເສັ້ນສະແດງການເພິ່ງພາອາໄສທີ່ດີທີ່ສຸດ...
ການສ້າງໄຟລ໌ສ່ວນຕົວ...
ກຳລັງກຳນົດຫົວໜ່ວຍທີ່ສາມາດໂຫຼດໄດ້...
ກຳລັງອັບເດດສ້າງໄຟລ໌...
ການກໍານົດຄໍາສັ່ງທີ່ຖືກຕ້ອງສໍາລັບຫນ່ວຍງານ ...
ກຳລັງສ້າງການຕັ້ງຄ່າ...
ເຮັດ.
ໄລຍະທໍາອິດຊອກຫາໄຟລ໌ຫນ່ວຍງານທັງຫມົດ (ລົງທ້າຍດ້ວຍ .U) ໃນບັນຊີສາທາລະນະ
ທໍາອິດ, ຫຼັງຈາກນັ້ນຢູ່ໃນເອກະຊົນຂອງເຈົ້າ. ຖ້າທ່ານຄັດລອກໄຟລ໌ສາທາລະນະຢູ່ໃນໄດເລກະທໍລີ U ສ່ວນຕົວຂອງທ່ານ
(ie ໄດເລກະທໍລີທີ່ມີຊື່ U ໃນລະດັບສູງສຸດຂອງຊຸດຂອງທ່ານ), ມັນຈະ override ສາທາລະນະ
ສະບັບ. ເມື່ອມັນມີບັນຊີລາຍຊື່ຂອງຫນ່ວຍງານທັງຫມົດທີ່ມີຢູ່, ມັນແຍກພວກມັນແລະສະກັດເອົາທັງຫມົດ
the ?MAKE: ເສັ້ນທີ່ຈະຮູ້ກ່ຽວກັບການເພິ່ງພາອາໄສ ແລະສັນຍາລັກຂອງຫອຍທີ່ຮູ້ຈັກ. ມັນຍັງ
ເນັ້ນໃສ່ເສັ້ນ ?H: ເພື່ອຮຽນຮູ້ກ່ຽວກັບສັນຍາລັກ C ແລະສັນຍາລັກຂອງຫອຍໃດທີ່ຈະຕ້ອງມີ
ຄິດໄລ່ເພື່ອໃຫ້ໄດ້ຄ່າທີ່ເຫມາະສົມສໍາລັບສັນຍາລັກ C ນັ້ນ (ດັ່ງນັ້ນພວກເຮົາມີລະດັບການຂຶ້ນກັບອີກ
ທີ່ນີ້).
ຕໍ່ໄປ, ຊື່ໄຟລ໌ທີ່ຖືກຕ້ອງຖືກສະກັດອອກຈາກໄຟລ໌ MANIFEST.new ແລະ a ຕ້ອງການ file ແມ່ນ
ສ້າງຂຶ້ນ: ໄຟລ໌ນັ້ນຈະລາຍຊື່ສັນຍາລັກ C ແລະສັນຍາລັກຂອງຫອຍທັງໝົດທີ່ຈໍາເປັນສໍາລັບຊຸດນັ້ນ. ພວກເຮົາ
ທໍາອິດສະແກນໄຟລ໌ປະເພດ C ສໍາລັບສັນຍາລັກ C, ຫຼັງຈາກນັ້ນເຜີຍແຜ່ການຂື້ນກັບພວກມັນ
ສັນຍາລັກຂອງຫອຍທີ່ກ່ຽວຂ້ອງ (ລວບລວມມາຈາກ ?H: ເສັ້ນ). ຕໍ່ໄປ .SH ໄຟລ໌ໄດ້ຖືກສະແກນແລະສຸດທ້າຍ
ສັນຍາລັກຂອງຫອຍທັງຫມົດແມ່ນເປັນທີ່ຮູ້ຈັກ.
Makefile ຊົ່ວຄາວຖືກສ້າງຂຶ້ນແລະ metaconfig ພະຍາຍາມ ເຮັດໃຫ້ ສັນຍາລັກຫອຍທັງຫມົດເພື່ອເບິ່ງ
ຄຳສັ່ງອັນໃດ (ຢູ່ໃນລາຍການທີສອງ ? MAKE: ແຖວ) ຖືກປະຕິບັດ, ແລະດັ່ງນັ້ນ ໜ່ວຍໃດແມ່ນ
ຕ້ອງການແທ້ໆ. ຫນ່ວຍທາງເລືອກທີ່ບໍ່ຈໍາເປັນຖືກໂຍກຍ້າຍອອກແລະ Makefile ທີສອງແມ່ນ
ສ້າງຂຶ້ນ. ເວລານີ້, ພວກເຮົາຮູ້ກ່ຽວກັບຫນ່ວຍງານທັງຫມົດແລະຄໍາສັ່ງຂອງເຂົາເຈົ້າ, ທາງເລືອກ
ຫນ່ວຍງານໄດ້ຖືກໂຍກຍ້າຍອອກແລະຄ່າເລີ່ມຕົ້ນຖືກຄິດໄລ່ສໍາລັບສັນຍາລັກຂອງແກະຂອງພວກເຂົາ. ໄດ້
ກໍາຫນົດຄ່າ script ສາມາດສ້າງຫຼັງຈາກນັ້ນ, ພ້ອມກັບ config_h.SH. ພວກເຮົາສຳເລັດແລ້ວ.
ອະນຸສັນຍາ
ສົນທິສັນຍາທີ່ເຫມາະສົມຕ້ອງໄດ້ຮັບການປະຕິບັດຕາມເພື່ອເຮັດໃຫ້ຂະບວນການທັງຫມົດມີສຽງ. ມີກໍລະນີ
ສົນທິສັນຍາສຳລັບຫົວໜ່ວຍ ແລະສົນທິສັນຍາການຕັ້ງຊື່ແບບປ່ຽນແປງໄດ້.
ຫົວໜ່ວຍທັງໝົດຄວນມີຕົວອັກສອນຕົວພິມນ້ອຍຕົວພິມນ້ອຍ, ເວັ້ນເສຍແຕ່ເປັນຫົວໜ່ວຍພິເສດ. ໂດຍ
ພິເສດ, ພວກເຮົາຫມາຍຄວາມວ່າພວກເຂົາບໍ່ໄດ້ກໍານົດຕົວແປ shell ໃຫມ່ທີ່ສາມາດນໍາໃຊ້ໄດ້
ຜູ້ໃຊ້ໃນໄຟລ໌ .SH ຂອງຕົນ, ແຕ່ແທນທີ່ຈະເປັນຫນ່ວຍງານຜະລິດສະຄິບຫຼືຕົວແປຂອງແກະທີ່ຈະ
ຖືກນໍາໃຊ້ພາຍໃນໂດຍ ກໍາຫນົດຄ່າ ສະຄຣິບ. ຕົວຢ່າງທົ່ວໄປແມ່ນ Init.U ໄຟລ໌ຊຶ່ງເປັນ
ການເລີ່ມຕົ້ນຕົວແປຕົ້ນຕໍ, ຫຼື Myread.U ເຊິ່ງຜະລິດ ອ່ານຂອງຂ້ອຍ script ໃຊ້ເກືອບ
ຢູ່ທົ່ວທຸກແຫ່ງໃນ ກໍາຫນົດຄ່າ ເມື່ອຄໍາຖາມຖືກຖາມກັບຜູ້ໃຊ້.
ຫົວໜ່ວຍທີ່ບໍ່ແມ່ນພິເສດຫຼັງຈາກນັ້ນແບ່ງອອກເປັນສອງກຸ່ມທີ່ແຕກຕ່າງກັນ: ຫົວໜ່ວຍກໍານົດຕົວແປ
ກ່ຽວຂ້ອງກັບສັນຍາລັກ C ແລະຫນ່ວຍງານກໍານົດຕົວແປຂອງແກະຂອງຕົນເອງ. ກຸ່ມທໍາອິດ
ຖືກແບ່ງອອກຕື່ມອີກໃນຕົວແປທີ່ກ່ຽວຂ້ອງກັບການລວມໄຟລ໌ (ຊື່ຂອງພວກເຂົາເລີ່ມຕົ້ນດ້ວຍ i_) ແລະ
ຕົວແປທີ່ກ່ຽວຂ້ອງກັບຄໍານິຍາມອື່ນໆ (ຊື່ເລີ່ມຕົ້ນດ້ວຍ d_). ກຸ່ມທີສອງມີ
ຊື່ຢືນສໍາລັບຕົວມັນເອງ, ສໍາລັບຕົວຢ່າງ cc.U ກໍານົດ $cc ຕົວແປ shell ທີ່ມີຄ່າ
C compiler ທີ່ຈະໃຊ້.
ຫນ່ວຍງານພິເສດບາງຄັ້ງສະຫງວນຕົວເອງບາງຕົວແປທີ່ກໍານົດໄວ້ລ່ວງຫນ້າແລະສົ່ງ "ຜົນໄດ້ຮັບ"
ໃນຕົວແປທີ່ຮູ້ຈັກອື່ນໆ. ສໍາລັບຕົວຢ່າງ, ໄດ້ ອ່ານຂອງຂ້ອຍ script ທີ່ຜະລິດໂດຍ Myread.U
ຄາດຫວັງວ່າການກະຕຸ້ນເຕືອນໃນ $rp, ຄໍາຕອບເລີ່ມຕົ້ນໃນ $dflt ແລະວາງຄໍາຕອບຂອງຜູ້ໃຊ້ $ans.
ນີ້ບໍ່ໄດ້ບັນທຶກໄວ້ໃນຫນ້າຄູ່ມືນີ້: ທ່ານຕ້ອງໄປແລະເບິ່ງຫນ່ວຍງານຂອງມັນເອງ
ເຂົ້າໃຈວ່າຕົວແປໃດຖືກນໍາໃຊ້ແລະວິທີການນໍາໃຊ້ຫນ່ວຍງານ.
ການນໍາໃຊ້ ໄດ້ ຄໍາແປສັບ
ໄຟລ໌ຄໍາສັບແມ່ນຜະລິດຕະພັນອັດຕະໂນມັດໂດຍ ແສງສີ script, ເຊິ່ງສະກັດເອົາ
ຂໍ້ມູນຈາກ ?S:, ?C: ແລະ ?MAKE: ເສັ້ນ ແລະປ່ຽນຮູບແບບເປັນຕົວອັກສອນ
ຄໍາສັບທີ່ຈັດລຽງລໍາດັບ. ມັນເປັນສິ່ງ ສຳ ຄັນທີ່ຈະອ່ານ ຄຳ ສັບເພື່ອຮູ້ກ່ຽວກັບສັນຍາລັກທີ່ເຈົ້າເປັນ
ອະນຸຍາດໃຫ້ນໍາໃຊ້. ຢ່າງໃດກໍຕາມ, ຄໍາສັບຄໍາສັບຈະບໍ່ບອກທ່ານວິທີການນໍາໃຊ້ພວກມັນ. ປົກກະຕິແລ້ວ, ນັ້ນແມ່ນ
ແລ້ວແຕ່ເຈົ້າ.
ມື້ຫນຶ່ງ, ເຈົ້າອາດຈະຂຽນຫົວຫນ່ວຍຂອງຕົນເອງແລະເຈົ້າຈະຮູ້ພຽງພໍ metaconfig
ເພື່ອເຮັດແນວນັ້ນຢ່າງວ່ອງໄວແລະປະສິດທິຜົນ. ແນວໃດກໍ່ຕາມ, ຢ່າລືມໃສ່ເອກະສານວຽກຂອງເຈົ້າໃຫ້ຖືກຕ້ອງ
ເສັ້ນ ?S: ແລະ ?C: ຫຼື ຄົນອື່ນໆຈະບໍ່ສາມາດນຳໃຊ້ມັນຄືນໃໝ່ໄດ້. ຈືຂໍ້ມູນການກ່ຽວກັບການ
ເວລາທີ່ທ່ານມີພຽງຄຳສັບ ແລະໜ້າຄູ່ມືນີ້ເພື່ອເລີ່ມຕົ້ນ.
ສະຫຼຸບ
ໃນປັດຈຸບັນທີ່ທ່ານຮູ້ຈັກ metaconfig ພື້ນຖານ, ທ່ານຄວນອ່ານ ລາຍລະອຽດ ພາກສ່ວນ, ຫຼັງຈາກນັ້ນ
ຂ້າມໄປຫາ ການອ້າງອິງ ພາກເພື່ອຮຽນຮູ້ກ່ຽວກັບລາຍລະອຽດ gory ທັງຫມົດເຊັ່ນ: ອະນຸຍາດ
syntax ສໍາລັບເສັ້ນຄວບຄຸມຫນ່ວຍງານ (ສາຍເລີ່ມຕົ້ນດ້ວຍ '?') ຫຼືຄໍາສັ່ງ MAKE ທີ່ແຕກຕ່າງກັນ
ທ່ານໄດ້ຮັບອະນຸຍາດໃຫ້ນໍາໃຊ້.
ການອ້າງອິງ
ພາກສ່ວນນີ້ເອກະສານພາຍໃນຂອງ metaconfig, ໂດຍພື້ນຖານແລ້ວ syntax ຫນ່ວຍ, ພິເສດ
ຫນ່ວຍງານທີ່ທ່ານຄວນຮູ້ກ່ຽວກັບແລະໄຟລ໌ຄໍາແນະນໍາ.
ໂດຍທົ່ວໄປ ຫນ່ວຍບໍລິການ syntax
ຫນ່ວຍບໍລິການ metaconfig ແບ່ງອອກເປັນສອງສ່ວນທີ່ແຕກຕ່າງກັນ. ພາກສ່ວນຫົວ (ແຖວເລີ່ມຕົ້ນ
ດ້ວຍ '?') ແລະພາກສ່ວນ shell (ລະຫັດທີ່ຈະລວມຢູ່ໃນ ກໍາຫນົດຄ່າ script). ມັນແມ່ນ
ສາມາດເພີ່ມ '?X:' ຄຳເຫັນຢູ່ບ່ອນໃດກໍໄດ້ພາຍໃນໜ່ວຍ, ແຕ່ອີກອັນໜຶ່ງ '?' ສາຍ (ຍັງ
ເອີ້ນວ່າ ການຄວບຄຸມ ສາຍ) ມີນະໂຍບາຍການສັ່ງທີ່ເຄັ່ງຄັດ.
ຖ້າເສັ້ນຄວບຄຸມຍາວເກີນໄປ, ມັນເປັນໄປໄດ້ທີ່ຈະໃຊ້ການສືບຕໍ່ໂດຍການຫລົບຫນີສຸດທ້າຍ
new-line ທີ່ມີ backslash ແລະສືບຕໍ່ໃນແຖວຕໍ່ໄປ (ເຊິ່ງຫຼັງຈາກນັ້ນຄວນຈະຖືກຫຍໍ້ຫນ້າ
ໂດຍຍະຫວ່າງ ຫຼືແຖບ).
ຕໍ່ໄປນີ້ແມ່ນຄໍາອະທິບາຍຢ່າງເປັນທາງການຂອງແຕ່ລະສາຍການຄວບຄຸມ. ເວັ້ນເສຍແຕ່ໄດ້ລະບຸໄວ້
ຖ້າບໍ່ດັ່ງນັ້ນ, ຄໍາສັ່ງຂອງການນໍາສະເຫນີນີ້ແມ່ນຄໍາສັ່ງທີ່ຈະນໍາໃຊ້ພາຍໃນຫນ່ວຍງານ.
?RCS: ຟຣີ ຂໍ້ຄວາມ
ເພື່ອໃຊ້ສໍາລັບຄໍາເຫັນ RCS, ຢູ່ເທິງສຸດຂອງຫນ່ວຍງານ.
?X: ໃດ ຂໍ້ຄວາມ
ຄໍາເຫັນຈຸດປະສົງທົ່ວໄປ. ອາດຈະປາກົດຢູ່ບ່ອນໃດກໍໄດ້ໃນຫນ່ວຍງານ ແຕ່ຕ້ອງຖືກປະໄວ້ຢ່າງສົມເຫດສົມຜົນ.
ສຳລັບຄຳເຫັນຂອງ RCS, ກະລຸນາໃຊ້ແບບຟອມຄຳເຫັນ ?RCS.
?ເຮັດ:ສັນຍາລັກ ບັນຊີລາຍຊື່: ການເພິ່ງພາອາໄສ ບັນຊີລາຍຊື່ [+ທາງເລືອກ]
ນີ້ແມ່ນເສັ້ນການເພິ່ງພາອາໄສອັນທໍາອິດ. ທໍາອິດ ສັນຍາລັກ ບັນຊີລາຍຊື່ ຄວນບອກສັນຍາລັກທັງຫມົດ
ສ້າງໂດຍຫນ່ວຍງານນີ້ (ເຊັ່ນວ່າມູນຄ່າຂອງມັນໄດ້ຖືກຄິດໄລ່ໂດຍສ່ວນແກະຂອງຫນ່ວຍງານ).
ສັນຍາລັກຄວນຖືກແຍກອອກຈາກພື້ນທີ່. ຖ້າສັນຍາລັກທີ່ກໍານົດແມ່ນສໍາລັບການນໍາໃຊ້ພາຍໃນເທົ່ານັ້ນແລະ
ບໍ່ຄວນປາກົດຢູ່ໃນທີ່ສ້າງຂຶ້ນ config.sh ໄຟລ໌, ຫຼັງຈາກນັ້ນມັນຄວນຈະຖືກນໍາຫນ້າດ້ວຍ a
'+' (ບໍ່ຕ້ອງສັບສົນກັບຕົວອ້າງອີງທາງເລືອກທີ່ກຳນົດໄວ້ຕໍ່ໄປນີ້). ທີ່ສອງ
ສ່ວນຫນຶ່ງຂອງບັນຊີລາຍຊື່ (ຫຼັງຈາກກາງ ':') ແມ່ນການຂຶ້ນກັບຫນ່ວຍງານ. ມັນຄວນຈະລາຍຊື່ທັງຫມົດ
ຫນ່ວຍງານພິເສດທີ່ຈໍາເປັນ, ເຊັ່ນດຽວກັນກັບສັນຍາລັກທັງຫມົດທີ່ໃຊ້ໂດຍແກະ
ການຈັດຕັ້ງປະຕິບັດ. ຖ້າສັນຍາລັກຖືກ nedded ແຕ່ຄ່າການຕັ້ງຄ່າຂອງມັນບໍ່ສໍາຄັນ, ມັນ
ສາມາດຖືກນໍາຫນ້າດ້ວຍ '+', ໃນກໍລະນີນີ້ມັນຖືກເອີ້ນວ່າການຂຶ້ນກັບເງື່ອນໄຂ: ຂອງມັນ
ຫນ່ວຍງານທີ່ສອດຄ້ອງກັນຈະຖືກໂຫລດຖ້າ, ແລະພຽງແຕ່ຖ້າ, ສັນຍາລັກນັ້ນແມ່ນຖ້າບໍ່ດັ່ງນັ້ນແທ້ໆ
ຕ້ອງການ; ຖ້າບໍ່ດັ່ງນັ້ນຄ່າເລີ່ມຕົ້ນຈະຖືກໃຊ້.
?ເຮັດ:ແຖບ ຄໍາສັ່ງ
ສາມາດມີເສັ້ນຄໍາສັ່ງຫນຶ່ງຫຼືຫຼາຍປະຕິບັດຕາມເສັ້ນການຂຶ້ນກັບເບື້ອງຕົ້ນ. ເຫຼົ່ານັ້ນ
ຄໍາສັ່ງຈະຖືກປະຕິບັດເມື່ອຫນ່ວຍງານຕ້ອງການໂຫລດພວກມັນໃສ່ ກໍາຫນົດຄ່າ, ທະເລສາບ
ວັກກ່ຽວກັບການເຮັດໃຫ້ຄໍາສັ່ງສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ. ໃຫ້ສັງເກດວ່າຊັ້ນນໍາ ແຖບ
ລັກສະນະແມ່ນຕ້ອງການກ່ອນທີ່ຈະ ຄໍາສັ່ງ.
?Y:ຮູບແບບ
ປະກາດຄຳແນະນຳການຈັດວາງສຳລັບໜ່ວຍນີ້. ຄຳສັ່ງນັ້ນອາດເປັນສາຍໜຶ່ງ
top, Default or ທາງລຸ່ມ (ກໍລະນີບໍ່ສໍາຄັນ, ແບບທີ່ແນະນໍາແມ່ນການສະກົດຄໍາ
ຕົວພິມໃຫຍ່). ຖ້າຖືກລະເວັ້ນ, Default ແມ່ນສົມມຸດ.
ຄໍາສັ່ງນີ້ແມ່ນຕ້ອງການພຽງແຕ່ຖ້າທ່ານຕ້ອງການບັງຄັບຫນ່ວຍງານຢູ່ເທິງສຸດຫຼືດ້ານລຸ່ມ
ຂອງການຜະລິດໄດ້ ກໍາຫນົດຄ່າ script, ຍ້ອນວ່າການຂຶ້ນກັບຫນ່ວຍງານອະນຸຍາດໃຫ້ມັນ. ສຳຄັນ
ຄໍາຖາມດັ່ງກ່າວອາດຈະຖືກບັງຄັບໃນຕອນເລີ່ມຕົ້ນ. ພາຍໃນຫ້ອງຮຽນຮູບແບບດຽວກັນ, ຫນ່ວຍງານ
ຖືກຈັດຮຽງຕາມຕົວອັກສອນທີ່ມີສອງກໍລະນີພິເສດສໍາລັບຫນ່ວຍ d_* ແລະ i_*, ບັງຄັບ
ຕາມລໍາດັບຢູ່ເທິງສຸດແລະລຸ່ມຂອງຫ້ອງຮຽນຂອງພວກເຂົາ (ແຕ່ສິ່ງເຫຼົ່ານີ້ຄວນຈະເປັນຂອງ
ຫ້ອງຮຽນເລີ່ມຕົ້ນ).
ມັນເຈົ້າບັງຄັບໃຫ້ຢູ່ເທິງສຸດຂອງຫນ່ວຍງານທີ່ມີຄວາມເພິ່ງພາອາໄສຕ້ອງການຫນ່ວຍງານອື່ນໆທັງຫມົດ
ກ່ອນຫນ້າມັນ, ທ່ານບັນລຸບໍ່ມີຫຍັງທີ່ຫນ້າສົນໃຈ. ເພາະສະນັ້ນ, ຄໍາສັ່ງນັ້ນຄວນຢ່າງແທ້ຈິງ
ຖືກນໍາໃຊ້ເພື່ອເພີ່ມຄວາມສໍາຄັນຂອງບາງຫນ່ວຍງານແບບໂຕ້ຕອບທີ່ບໍ່ຂຶ້ນກັບຈໍານວນຫຼາຍ
ສັນຍາລັກທີ່ຜູ້ໃຊ້ສັງເກດເຫັນອື່ນໆ, ເຊັ່ນ: ຄໍາຖາມທີ່ກ່ຽວຂ້ອງກັບເສັ້ນທາງ.
?S:symbol_name [(ລ້າສະໄຫມ ສັນຍາລັກ ບັນຊີລາຍຊື່)]:
ແນະນຳສັນຍາລັກແກະ. ແຖວທຳອິດນີ້ຕັ້ງຊື່ສັນຍາລັກ, ເລືອກຕາມດ້ວຍ a
ລາຍຊື່ທີ່ປິດຢູ່ລະຫວ່າງວົງເລັບ ແລະໃຫ້ທຽບເທົ່າທີ່ລ້າສະໄຫມ. ລ້າສະໄຫມເຫຼົ່ານັ້ນ
ສັນຍາລັກຈະຖືກ remapped ເປັນໃຫມ່ symbol_name ຖ້າຫາກວ່າ -o ທາງເລືອກແມ່ນໄດ້ຮັບການໃຫ້
metaconfig.
?S:ໃດ ຂໍ້ຄວາມ, ສໍາລັບການ ຄໍາແປສັບ
ໂດຍພື້ນຖານແລ້ວຄໍາຄິດຄໍາເຫັນທີ່ອະທິບາຍສັນຍາລັກຂອງແກະ, ເຊິ່ງຈະຖືກສະກັດໂດຍ ແສງສີ
ເຂົ້າໄປໃນເອກະສານຄໍາສັບ.
?S:. ປິດຄຳເຫັນສັນຍາລັກຂອງຫອຍ.
?C:symbol_name [~ alias][(ລ້າສະໄຫມ ສັນຍາລັກ ບັນຊີລາຍຊື່)]:
ແນະນຳສັນຍາລັກ C ໃໝ່. ໄດ້ alias ຊື່ແມ່ນຊື່ພາຍໃຕ້ສັນຍາລັກ C
ໄດ້ຮັບການຄວບຄຸມ, ເຊັ່ນ: ຖ້າຫາກວ່າ alias ສັນຍາລັກແມ່ນຕ້ອງການ, ຫຼັງຈາກນັ້ນສັນຍາລັກ C ຈະຖືກຂຽນ
ໃນ config_h.SH ໄຟລ໌. ໂດຍປົກກະຕິແລ້ວ, ນາມແຝງແມ່ນພຽງແຕ່ '%<' (ຫຍໍ້ມາຈາກຊື່ຂອງໜ່ວຍ)
ແລະຍັງມີ ?W: line mapping a C symbol to the alias. ຍັງພາກສ່ວນທີ່ກ່ຽວຂ້ອງ
ຂອງ ?H: ສາຍຖືກປົກປ້ອງຢ່າງຈະແຈ້ງໂດຍເງື່ອນໄຂ '?%<'. ເບິ່ງສັນຍາລັກ
ຫຍໍ້ໜ້ານາມແຝງສຳລັບລາຍລະອຽດເພີ່ມເຕີມ. ເສັ້ນທີ່ຍັງເຫຼືອແມ່ນທາງເລືອກ
ລ້າສະໄຫມ ສັນຍາລັກ ບັນຊີລາຍຊື່, ເຊິ່ງສະແດງລາຍການທຽບເທົ່າເກົ່າສໍາລັບອັນໃຫມ່ symbol_name.
?C:ໃດ ຂໍ້ຄວາມ, ສໍາລັບການ ຄໍາແປສັບ ແລະ config_h.SH
ໂດຍພື້ນຖານແລ້ວຄໍາເຫັນທີ່ອະທິບາຍສັນຍາລັກ C, ເຊິ່ງຈະຖືກສະກັດໂດຍ ແສງສີ
ເຂົ້າໄປໃນເອກະສານຄໍາສັບແລະໂດຍ metaconfig ເຂົ້າໄປໃນ config_h.SH file ຖ້າສັນຍາລັກແມ່ນ
ຕ້ອງການ (ຫຼືຖ້າຫາກວ່າ alias ຂອງຕົນແມ່ນຕ້ອງການໃນເວລາທີ່ການ aliasing ສັນຍາລັກໄດ້ຖືກນໍາໃຊ້).
?C:. ປິດຄຳເຫັນສັນຍາລັກ C.
?H:?ສັນຍາລັກ:config_h.SH stuff
ນີ້ແມ່ນຄໍາຮ້ອງຂໍການລວມເຂົ້າໂດຍທົ່ວໄປ config_h.SH. ເສັ້ນແມ່ນຂຽນພຽງແຕ່ເມື່ອ
ເຝົ້າ ສັນຍາລັກ ແມ່ນຕ້ອງການແທ້ໆ. ຮູບແບບທົ່ວໄປນີ້ແມ່ນຈໍາເປັນເມື່ອສັນຍາລັກ C
ນາມແຝງຖືກໃຊ້. ຖ້າບໍ່ດັ່ງນັ້ນ, ຖ້າທ່ານໃຊ້ຮູບແບບ "ມາດຕະຖານ" ອື່ນ, the
guarding ແມ່ນເຮັດໄດ້ໂດຍອັດຕະໂນມັດໂດຍ metaconfig ຕົວເອງ
?H:#$d_var VAR "$var"
ກໍານົດເງື່ອນໄຂຕາມເງື່ອນໄຂ VAR ສັນຍາລັກ C ເຂົ້າໄປໃນ $var ເມື່ອຖືກຕັ້ງເປັນ 'ກໍານົດ'. ໝາຍເຖິງ ກ
'?VAR:' ຮັກສາເງື່ອນໄຂ, ແລະ metaconfig ເຊື່ອມຕໍ່ອັດຕະໂນມັດ VAR ກັບສອງແກະຂອງມັນ
ການຂື້ນກັບຕົວແປ (ເຊັ່ນທັງສອງ $d_var ແລະ $var ຈະຖືກທຸງເປັນ ຕ້ອງການຢາກ if VAR is
ໃຊ້ໃນແຫຼ່ງ C).
?H:#define VAR [ທາງເລືອກ ຂໍ້ຄວາມ]
ສະເຫມີກໍານົດ VAR ສັນຍາລັກ C ກັບບາງຄ່າ. ຫມາຍເຖິງ '?VAR:' ຮັກສາເງື່ອນໄຂ.
ການຂື້ນກັບແກະອັດຕະໂນມັດແມ່ນເຮັດກັບຫນ່ວຍງານຂອງມັນເອງ.
?H:#define VAR(x,y,z) $var
ກຳນົດຄ່າມະຫາພາກສະເໝີ VAR ເປັນມູນຄ່າຂອງ $var ຕົວແປ. ມັນຂຶ້ນກັບ
ຫນ່ວຍບໍລິການເພື່ອຮັບປະກັນ $var ຖືຄຸນຄ່າທີ່ສົມເຫດສົມຜົນ. ການຂຶ້ນກັບອັດຕະໂນມັດລະຫວ່າງ C
ມະຫາພາກ VAR ແລະຕົວແປຂອງຫອຍໄດ້ຖືກສ້າງຕັ້ງຂຶ້ນ, ແລະເສັ້ນທັງຫມົດແມ່ນ guarded ໂດຍ an
implicit '?VAR:'.
?H:#$d_var VAR
ກໍານົດເງື່ອນໄຂ VAR if $d_var ຖືກຕັ້ງເປັນ 'ກໍານົດ'. ຫມາຍເຖິງ '?VAR:' ເຝົ້າ
ສະພາບ. ການຂຶ້ນກັບ Shell ອັດຕະໂນມັດແມ່ນສ້າງໄປສູ່ $d_war.
?H:#define VAR "$var"
ກຳນົດຄ່າທີ່ກຳນົດຄ່າໃຫ້ກັບ VAR ສັນຍາລັກ C. ຫມາຍເຖິງ '?VAR:' ເງື່ອນໄຂການຄຸ້ມຄອງ.
ການຂຶ້ນກັບ shell ອັດຕະໂນມັດແມ່ນຖືກສ້າງຂຶ້ນເພື່ອເຊື່ອມຕໍ່ VAR ແລະ $var.
?H:. ປິດ config_h.SH ຄໍາຮ້ອງສະຫມັກລວມ.
?M:C ສັນຍາລັກ: C dependencies
ແນະນໍາຄໍານິຍາມ magic ກ່ຽວກັບສັນຍາລັກ C, ສໍາລັບ confmagic.h, ແລະກໍານົດ
ສັນຍາລັກ guarding ສໍາລັບສ່ວນທີ່ເຫຼືອ ?M: ຄໍານິຍາມ. ເສັ້ນນີ້ຫມາຍເຖິງຢ່າງງຽບໆ
'?W:%<:C ສັນຍາລັກ', ie ຫນ່ວຍງານຈະຖືກໂຫລດເຂົ້າໄປໃນ Configure ຖ້າສັນຍາລັກ C ປາກົດ
ພາຍໃນແຫຼ່ງ C, ບໍ່ວ່າຈະເປັນ magic ຖືກນໍາໃຊ້ຫຼືບໍ່. C dependencies ຖືກເປີດໃຊ້ງານ
ໃນເວລາທີ່ magic ຖືກນໍາໃຊ້, ເພື່ອບັງຄັບໃຫ້ຄໍານິຍາມຂອງເຂົາເຈົ້າຢູ່ໃນ config_h.SH. ເຖິງຢ່າງໃດກໍ່ຕາມ, ຖ້າ
magic ແມ່ນ ບໍ່ ໃຊ້ແຕ່ສັນຍາລັກ C ປາກົດຢູ່ໃນແຫຼ່ງທີ່ບໍ່ມີ C ທີ່ຈໍາເປັນ
ການເພິ່ງພາອາໄສ, ທ່ານຈະຖືກເຕືອນທຸກຄັ້ງທີ່ໄຟລ໌ Wanted ຖືກສ້າງຂຶ້ນ, ເພາະວ່າມັນອາດຈະເປັນ
ບັນຫາການພົກພາ (ແລະເພາະວ່າຫນ່ວຍບໍລິການຖືກໂຫລດໂດຍບໍ່ມີເງື່ອນໄຂ
ຕັ້ງຄ່າທຸກຄັ້ງທີ່ສັນຍາລັກ C ຖືກໃຊ້, ໂດຍບໍ່ຄໍານຶງເຖິງອັນອື່ນ ?C: ສາຍຈາກ
ຫນ່ວຍ).
?M:cpp defs
ກຳນົດການສ້າງແຜນທີ່ magic cpp ທີ່ຈະນຳສະເໜີໃນ confmagic.h ທຸກຄັ້ງທີ່ໜ້າເປັນຫ່ວງ
ສັນຍາລັກຖືກນໍາໃຊ້. ມີ implicit '?ຊິມ' ເຝົ້າຢູ່ທີ່ ຊິມ ແມ່ນຊື່ສັນຍາລັກ
ກໍານົດໂດຍການນໍາພາ ?M: ເສັ້ນ.
?ມ:. ປິດ confmagic.h ຄໍາຮ້ອງສະຫມັກລວມ.
?W:ຫອຍ ສັນຍາລັກ ບັນຊີລາຍຊື່:C ສັນຍາລັກ ບັນຊີລາຍຊື່
ຜູກພັນຈຸດຫມາຍປາຍທາງຂອງສັນຍາລັກຫອຍທີ່ມີສັນຍາລັກ C: ຖ້າຫາກວ່າໃດໆຂອງ C
ສັນຍາລັກທີ່ລະບຸໄວ້ແມ່ນຕ້ອງການ, ຫຼັງຈາກນັ້ນສັນຍາລັກແກະທັງຫມົດແມ່ນຫມາຍເປັນຕ້ອງການ. ເປັນປະໂຫຍດ
ບັງຄັບການລວມເອົາຫນ່ວຍງານ (ບັນຊີລາຍຊື່ສັນຍາລັກຂອງແກະຖືກຕັ້ງເປັນ '%<') ເມື່ອມີບາງ C
ສັນຍາລັກຖືກກວດພົບ. ບັນຊີລາຍຊື່ສັນຍາລັກຂອງຫອຍອາດຈະຖືກປະໄວ້ຫວ່າງເປົ່າ, ເພື່ອປະໂຫຍດຈາກດ້ານຂ້າງ
ຜົນກະທົບຂອງສະຖານທີ່ສັນຍາລັກ C ພາຍໃນ builtin pre-processor (ສັນຍາລັກເປັນ ກໍານົດໄວ້
ສໍາລັບຕົວປະມວນຜົນກ່ອນນັ້ນຖ້າຢູ່ໃນແຫຼ່ງ). ເພື່ອຊອກຫາຮູບແບບທີ່ມີຊ່ອງຫວ່າງ
ໃນພວກມັນ, ທ່ານຈໍາເປັນຕ້ອງອ້າງເຖິງສັນຍາລັກ C ພາຍໃນວົງຢືມງ່າຍໆ, ຄືກັບ 'struct
ເຂດເວລາ'.
?V:ອ່ານຢ່າງດຽວ ສັນຍາລັກ:ອ່ານ - ຂຽນ ສັນຍາລັກ
ນີ້ແມ່ນ ໂລຫະ hint ແລະຄວນຈະຖືກນໍາໃຊ້ພຽງແຕ່ໃນຫນ່ວຍງານພິເສດທີ່ສົ່ງອອກເປືອກບາງ
ຕົວແປ. ຕົວແປກ່ອນກາງ ':' ຖືກສົ່ງອອກແບບອ່ານເທົ່ານັ້ນ (ປ່ຽນພວກມັນ
ຈະອອກຄໍາເຕືອນ), ໃນຂະນະທີ່ສັນຍາລັກອື່ນໆອາດຈະຖືກອ່ານແລະປ່ຽນແປງຢ່າງເສລີ.
?F:ໄຟ ສ້າງ
ເສັ້ນນີ້ຮັບໃຊ້ສອງຈຸດປະສົງ: ມັນແມ່ນ ໂລຫະ hint, ແລະຍັງ placeholder ສໍາລັບ
ໃນອະນາຄົດ jmake ໃຊ້. ມັນຕ້ອງບອກສາມປະເພດຂອງໄຟລ໌: ໄຟລ໌ຊົ່ວຄາວທີ່ມີ
ສ້າງສໍາລັບການທົດສອບ, UU ສ່ວນຕົວທີ່ສ້າງຂຶ້ນໃນໄດເລກະທໍລີ UU ສໍາລັບຕໍ່ມາ
perusal, ແລະສາທາລະນະທີ່ປະໄວ້ຢູ່ໃນລະບົບຮາກຂອງຊຸດ. ຊົ່ວຄາວ
ໄຟລ໌ຈະຕ້ອງຢູ່ໃນລາຍການ '!' ກ່ອນໜ້າ. ລັກສະນະ (ຫມາຍຄວາມວ່າ "ບໍ່! ພວກມັນບໍ່ໄດ້ຖືກໃຊ້ຄືນໃຫມ່
ຕໍ່ມາ!
./file, ບໍ່ພຽງແຕ່ ເອກະສານ), ແລະສາທາລະນະຄວນຈະມີຊື່ເປັນ.
?T:ຫອຍ ຊົ່ວຄາວ
ອີກປະການຫນຶ່ງ ໂລຫະ ຄຳໃບ້. ແຖວນີ້ສະແດງຕົວແປທັງໝົດທີ່ໃຊ້ເປັນຕົວແປຊົ່ວຄາວ
ພາຍໃນພາກສ່ວນ shell ຂອງຫນ່ວຍງານນີ້.
?D:ສັນຍາລັກ='ມູນຄ່າ'
ຄ່າເລີ່ມຕົ້ນສໍາລັບສັນຍາລັກທີ່ໃຊ້ເປັນເງື່ອນໄຂຕາມເງື່ອນໄຂ. ຖ້າບໍ່ມີ ?D: ເສັ້ນແມ່ນ
ພົບເຫັນ, ຫຼັງຈາກນັ້ນຄ່າ null ຖືກນໍາໃຊ້ແທນ. ໄດ້ ໂລຫະ ໂຄງການຈະເຕືອນທ່ານຖ້າຫາກວ່າ a
ສັນຍາລັກໄດ້ຖືກນໍາໃຊ້ຢ່າງຫນ້ອຍຫນຶ່ງຄັ້ງເປັນການອີງຕາມເງື່ອນໄຂແລະບໍ່ມີທີ່ເຫມາະສົມ
?D: ການເລີ່ມຕົ້ນ. ມັນເປັນການປະຕິບັດທີ່ດີທີ່ຈະເພີ່ມສາຍເຫຼົ່ານັ້ນເຖິງແມ່ນວ່າສໍາລັບ null
ການເລີ່ມຕົ້ນນັບຕັ້ງແຕ່ມັນເນັ້ນຫນັກເຖິງລັກສະນະທາງເລືອກທີ່ເປັນໄປໄດ້ຂອງສັນຍາລັກ.
?O:ໃດ ຂໍ້ຄວາມ ທ່ານ ຕ້ອງການ
ຄໍາສັ່ງນີ້ຊີ້ໃຫ້ເຫັນວ່າຫນ່ວຍງານນີ້ແມ່ນລ້າສະໄຫມທັງຫມົດ. ເມື່ອໃດກໍຕາມການນໍາໃຊ້ຂອງໃດໆ
ສັນຍາລັກຂອງມັນແມ່ນເຮັດ (ຫຼືການນໍາໃຊ້ທາງອ້ອມໂດຍຜ່ານ dependencies), ຂໍ້ຄວາມແມ່ນ output ສຸດ
ຫນ້າຈໍ (ໃນ stderr). ທ່ານສາມາດໃສ່ແຮ່ຫນຶ່ງເສັ້ນເພີ່ມເຕີມ, ໃນກໍລະນີນີ້ແຕ່ລະສາຍຈະ
ພິມ, ຕາມລໍາດັບ.
?LINT:ໂລຫະ ຄໍາແນະນໍາ
ເບິ່ງ ໂລຫະ ຫນ້າຄູ່ມືສໍາລັບການອະທິບາຍຄໍາແນະນໍາທີ່ແຕກຕ່າງກັນທີ່ສາມາດເປັນ
ໃຊ້ແລ້ວ.
?ໃນມັນ:ການເລີ່ມຕົ້ນ ລະຫັດ
ລະຫັດເບື້ອງຕົ້ນທີ່ລະບຸໄວ້ໂດຍແຖວນີ້ຈະຖືກໂຫລດຢູ່ເທິງສຸດຂອງ
ກໍາຫນົດຄ່າ script ໃຫ້ຫນ່ວຍງານແມ່ນຈໍາເປັນ.
C ສັນຍາລັກ ນາມແຝງ
ບາງຄັ້ງມັນເປັນໄປບໍ່ໄດ້ທີ່ຈະອີງໃສ່ metaconfigການເລືອກເລີ່ມຕົ້ນຂອງຕົນເອງສໍາລັບ config_h.SH
ຄໍາເຫັນແລະຄໍານິຍາມສັນຍາລັກ C. ນັ້ນແມ່ນບ່ອນທີ່ aliasing ເຂົ້າມາຫຼິ້ນ. ເນື່ອງຈາກວ່າມັນແທນທີ່ຈະ
ຍາກທີ່ຈະອະທິບາຍ, ພວກເຮົາຈະສຶກສາຕົວຢ່າງເພື່ອເຂົ້າໃຈກົນໄກພື້ນຖານ.
ຫນ່ວຍບໍລິການ d_const.U ພະຍາຍາມກໍານົດວ່າ C compiler ຂອງທ່ານຮູ້ຈັກຫຼືບໍ່ const
ຄໍາສໍາຄັນ. ຖ້າມັນບໍ່ພວກເຮົາຕ້ອງການ remap ຄໍາສໍາຄັນນັ້ນເປັນ string null, ໃນຄໍາສັ່ງທີ່ຈະປ່ອຍໃຫ້
ລວບລວມໂຄງການ. ຍິ່ງໄປກວ່ານັ້ນ, ພວກເຮົາຕ້ອງການທີ່ຈະກະຕຸ້ນອັດຕະໂນມັດການທົດສອບໃນເວລາທີ່ const ຄໍາ
ຖືກນໍາໃຊ້.
ນີ້ແມ່ນພາກສ່ວນທີ່ກ່ຽວຂ້ອງຂອງຫົວໜ່ວຍ d_const.U:
?ເຮັດ:d_const: cat cc ccflags Setvar
?ເຮັດ: -pick add $@ %
?S:d_const:
?S: ຕົວແປນີ້ກໍານົດເງື່ອນໄຂຂອງສັນຍາລັກ HASCONST, ເຊິ່ງ
?S: ຊີ້ບອກໃຫ້ໂປແກມ C ທີ່ compiler C ນີ້ຮູ້ກ່ຽວກັບ
?S: ປະເພດ const.
?S:.
?C:HASCONST ~ %<:
?C: ສັນຍາລັກນີ້, ຖ້າຫາກວ່າກໍານົດ, ສະແດງໃຫ້ເຫັນວ່າ C compiler ນີ້ຮູ້ກ່ຽວກັບ
?C: ປະເພດ const. ບໍ່ຈໍາເປັນຕ້ອງທົດສອບຕົວຈິງສໍາລັບສັນຍາລັກນັ້ນ
?C: ພາຍໃນໂຄງການຂອງທ່ານ. ການນໍາໃຊ້ພຽງແຕ່ຄໍາສໍາຄັນ "const" ຈະ
?C: ກະຕຸ້ນການທົດສອບທີ່ຈໍາເປັນ.
?C:.
?H:?%<:#$d_const HASCONST /**/
?H:?%<:#ifndef HASCONST
?H:?%<:#define const
?H:?%<:#endif
?H:.
?W:%<:const
?LINT:ຕັ້ງ d_const
?LINT:const ທີ່ຮູ້ຈັກ
: ກວດເບິ່ງຄໍາສໍາຄັນ const
ສຽງສະທ້ອນ ""
echo 'ການກວດສອບເພື່ອເບິ່ງວ່າ C compiler ຂອງທ່ານຮູ້ກ່ຽວກັບ "const"...' >&4
/bin/cat >const.c <<'EOCP'
ຕົ້ນຕໍ ()
{
const char *foo;
}
EOCP
ຖ້າ $cc -c $ccflags const.c >/dev/null 2>&1 ; ແລ້ວ
val="$define"
ສຽງສະທ້ອນ "ແມ່ນແລ້ວ, ມັນເຮັດ."
ອື່ນ
val="$undef"
ສຽງສະທ້ອນ "ບໍ່, ມັນບໍ່ໄດ້."
fi
ຕັ້ງ d_const
eval $setvar
ທໍາອິດພວກເຮົາສັງເກດເຫັນການນໍາໃຊ້ຂອງ ?W: ເສັ້ນ, ເຊິ່ງໂດຍພື້ນຖານແລ້ວເວົ້າວ່າ: "ຫນ່ວຍນີ້ແມ່ນຕ້ອງການໃນເວລາທີ່
const ຄໍາສໍາຄັນຖືກນໍາໃຊ້ໃນໄຟລ໌ C. ". ເພື່ອ remap ຕາມເງື່ອນໄຂ const ເປັນ null
ສາຍເຂົ້າ config.h, ຂ້າພະເຈົ້າໄດ້ເລືອກທີ່ຈະກໍານົດເງື່ອນໄຂ HACONST ຜ່ານ $d_const.
ຢ່າງໃດກໍຕາມ, ນີ້ເຮັດໃຫ້ເກີດບັນຫາ, ເພາະວ່າ HACONST ສັນຍາລັກຈະບໍ່ຖືກນໍາໃຊ້ໃນ
ແຫຼ່ງຂໍ້ມູນ, ພຽງແຕ່ const token ແມ່ນ. ແລະ ?H: ການກໍານົດເສັ້ນ HACONST ແມ່ນ implicitely
ປົກປ້ອງໂດຍ '?HASCONST'. ດັ່ງນັ້ນ, ພວກເຮົາຕ້ອງເພີ່ມຂໍ້ຈໍາກັດ '?%<' ຢ່າງຊັດເຈນເພື່ອບອກ
metaconfig ວ່າສາຍເຫຼົ່ານັ້ນຄວນຈະຖືກລວມເຂົ້າໃນ config_h.SH ທຸກຄັ້ງທີ່ສັນຍາລັກ '%<'
ຕ້ອງການ (%< ຫມາຍເຖິງຊື່ຂອງຫນ່ວຍງານ, ທີ່ນີ້ d_const).
ນັ້ນແມ່ນເກືອບສົມບູນແບບ, ເພາະວ່າເສັ້ນ ?W: ຕ້ອງການ d_const ທຸກໆຄັ້ງ const ຖືກນໍາໃຊ້, ຫຼັງຈາກນັ້ນ
ເສັ້ນ ?H: ຈະຖືກລວມເຂົ້າໃນ config_h.SH ໄຟລ໌. ຢ່າງໃດກໍຕາມ, ຄວາມຄິດເຫັນນໍາ (?C:
ສາຍ) ຕິດກັບ HACONST ຕົວຂອງມັນເອງຍັງ guarded ຜ່ານ HACONST, ie ມັນມີ implicit
ຂໍ້ຈຳກັດ '?HASCONST'. ເພາະສະນັ້ນຄວາມຕ້ອງການສໍາລັບການ ນາມແຝງ ໄດ້ HACONST ສັນຍາລັກເປັນ '%<'.
ສ່ວນທີ່ຍັງເຫຼືອຂອງຫນ່ວຍ (ສ່ວນແກະ) ແມ່ນກົງໄປກົງມາແທ້ໆ. ມັນງ່າຍດາຍ
ພະຍາຍາມລວບລວມຕົວຢ່າງໂຄງການ C ໂດຍໃຊ້ const ຄໍາສໍາຄັນ. ຖ້າມັນສາມາດເຮັດໄດ້, ຫຼັງຈາກນັ້ນມັນຈະ
ກໍານົດ $d_const ຜ່ານ $setvar fonction (ກໍານົດໂດຍ Setvar.U ຫນ່ວຍ). ເບິ່ງວັກ
ກ່ຽວກັບຫນ່ວຍງານພິເສດສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ.
ເຮັດໃຫ້ ຄໍາສັ່ງ
ໃນ ?MAKE: ເສັ້ນຄໍາສັ່ງ, ທ່ານອາດຈະຂຽນຄໍາສັ່ງ shell ທີ່ຈະປະຕິບັດເປັນ - ແມ່ນຫຼື a
ພິເສດ - ເລືອກ ຄໍາສັ່ງທີ່ຖືກກັກຂັງໂດຍ metaconfig ແລະວິເຄາະເພື່ອເບິ່ງສິ່ງທີ່ຄວນຈະເປັນ
ສຳເລັດແລ້ວ. ຊັ້ນນໍາ '-' ແມ່ນພຽງແຕ່ມີເພື່ອປ້ອງກັນ ເຮັດໃຫ້ ຈາກການລົ້ມເຫລວເມື່ອຄໍາສັ່ງກັບຄືນມາ
ສະຖານະທີ່ບໍ່ແມ່ນສູນ -- ມັນບໍ່ຈໍາເປັນແທ້ໆນັບຕັ້ງແຕ່ພວກເຮົາໃຊ້ 'ເຮັດໃຫ້ -n' ເພື່ອແກ້ໄຂ
ການເພິ່ງພາອາໄສ, ແຕ່ຂ້າພະເຈົ້າແນະນໍາໃຫ້ທ່ານຮັກສາມັນໃນກໍລະນີທີ່ມັນກາຍເປັນຂໍ້ບັງຄັບໃນສະບັບໃນອະນາຄົດ.
syntax ຂອງ ເລືອກເອົາ ຄໍາສັ່ງແມ່ນ:
- ເລືອກ cmd $@ target_file
ບ່ອນທີ່ $@ ແມ່ນ macro ມາດຕະຖານພາຍໃນ Makefiles ຢືນສໍາລັບເປົ້າຫມາຍໃນປະຈຸບັນ (ຊື່
ຂອງຫນ່ວຍງານທີ່ກໍາລັງກໍ່ສ້າງ, ດ້ວຍການຂະຫຍາຍ .U ສຸດທ້າຍຖືກຖອດອອກ). ໄດ້ cmd ສ່ວນຫນຶ່ງແມ່ນ
ຈິງ metaconfig ຄໍາສັ່ງທີ່ຈະດໍາເນີນການ, ແລະ target_file ແມ່ນຕົວກໍານົດການອື່ນ, ເຊິ່ງ
ການຕີລາຄາແມ່ນຂຶ້ນກັບ cmd ຕົວຂອງມັນເອງ. ມັນຍັງມີການຂະຫຍາຍ .U ສຸດທ້າຍຂອງຕົນຖອດອອກແລະ
ໂດຍປົກກະຕິຫມາຍເຖິງໄຟລ໌ຫນ່ວຍ, ເວັ້ນເສຍແຕ່ວ່າມັນເລີ່ມຕົ້ນດ້ວຍ './' ໃນກໍລະນີທີ່ມັນອ້າງອີງຫນຶ່ງ
ຂອງ metaconfig ຄວບຄຸມໄຟລ໌ໃນ '.MT ລະບົບ.
ຄໍາສັ່ງທີ່ມີຢູ່ແມ່ນ:
ເພີ່ມ ຕື່ມ ການ target_file to ກໍາຫນົດຄ່າ.
add.Config_sh
ຕື່ມຂໍ້ມູນໃສ່ໃນສ່ວນຂອງ ກໍາຫນົດຄ່າ ການຜະລິດ config.sh ໄຟລ໌. ໃຊ້ເທົ່ານັ້ນ
ຕົວແປແມ່ນເພີ່ມ, ເງື່ອນໄຂ (ຈາກການຂຶ້ນກັບເງື່ອນໄຂ) ແມ່ນ
ຂ້າມ.
add.Null ເພີ່ມພາກສ່ວນທີ່ເລີ່ມຕົ້ນຕົວແປຂອງ shell ທັງໝົດທີ່ໃຊ້ກັບສະຕຣິງຫວ່າງເປົ່າ.
c_h_weed ຜະລິດ config_h.SH ໄຟລ໌. ພຽງແຕ່ເສັ້ນທີ່ຈໍາເປັນແມ່ນພິມອອກ.
cm_h_weed ຜະລິດ confmagic.h ໄຟລ໌. ພຽງແຕ່ເສັ້ນທີ່ຈໍາເປັນແມ່ນພິມອອກ. ນີ້
ຄໍາສັ່ງຖືກເປີດໃຊ້ພຽງແຕ່ເມື່ອ -M ສະຫຼັບແມ່ນໃຫ້, ຫຼືເມື່ອ a confmagic.h ເອກະສານ
ມີຢູ່ແລ້ວ.
close.Config_sh
ເພີ່ມສັນຍາລັກ 'EOT' ສຸດທ້າຍໃນເສັ້ນດ້ວຍຕົວມັນເອງເພື່ອສິ້ນສຸດເອກະສານຢູ່ທີ່ນີ້
ການກໍ່ສ້າງການຜະລິດ config.sh ຍື່ນ.
prepend Prepends ເນື້ອໃນຂອງເປົ້າຫມາຍດັ່ງກ່າວ target_file ຖ້າໄຟລ໌ນັ້ນບໍ່ຫວ່າງ.
weed ເພີ່ມຫນ່ວຍບໍລິການ ກໍາຫນົດຄ່າ ຄ້າຍຄື ເພີ່ມ ຄໍາສັ່ງ, ແຕ່ເຮັດບາງການທົດສອບເພີ່ມເຕີມ
ເອົາ '?ສັນຍາລັກ' ແລະ '%ສັນຍາລັກ' ສາຍຈາກ target_file ຖ້າຫາກວ່າສັນຍາລັກ
ບໍ່ຕ້ອງການຫຼືຕ້ອງການຕາມເງື່ອນໄຂ. ແບບຟອມ '%' ແມ່ນໃຊ້ພາຍໃນໂດຍ
metaconfig ໃນຂະນະທີ່ການຜະລິດໄຟລ໌ .U ຂອງຕົນເອງຢູ່ໃນ '.MT' ໄດເລກະທໍລີ.
ເຊັດດຽວກັນກັບ ເພີ່ມ ແທ້ໆ, ແຕ່ປະຕິບັດການທົດແທນມະຫາພາກເພີ່ມເຕີມ. ໄດ້
ມະຫາພາກທີ່ມີຢູ່ແມ່ນໄດ້ອະທິບາຍໄວ້ໃນ Hardwired ມາໂຄຣ ວັກ.
ໃນຖານະເປັນບົດບັນທຶກຂ້າງ, metaconfig ສ້າງກ -cond ຄໍາສັ່ງພາຍໃນເພື່ອຈັດການກັບເງື່ອນໄຂ
ການເພິ່ງພາອາໄສ. ທ່ານບໍ່ຄວນໃຊ້ມັນດ້ວຍຕົວທ່ານເອງ, ແຕ່ວ່າທ່ານຈະເຫັນມັນຖ້າຫາກວ່າ scanning ໄດ້
ຜະລິດ makefile ໃນ .MT ລະບົບ.
Hardwired ມາໂຄຣ
ມະຫາພາກຕໍ່ໄປນີ້ຖືກຮັບຮູ້ໂດຍ ເຊັດ ຄໍາສັ່ງແລະທົດແທນກ່ອນທີ່ຈະລວມເຂົ້າໃນ
ກໍາຫນົດຄ່າ:
ຈໍານວນການແກ້ໄຂພື້ນຖານຂອງຊຸດ, ໄດ້ມາຈາກ . ກະເປົາ.
ວັນທີປັດຈຸບັນ.
ທີ່ຢູ່ອີເມລຂອງຜູ້ບໍາລຸງຮັກສາຊຸດນີ້, ໄດ້ມາຈາກຂອງທ່ານ
. ກະເປົາ.
ຊື່ຂອງຊຸດ, ດັ່ງທີ່ໄດ້ມາຈາກຂອງທ່ານ . ກະເປົາ ຍື່ນ.
ລະດັບ patch ຂອງ metaconfig ໂຄງການ (ເຊົາສະຫນັບສະຫນູນ ).
ລະດັບການດັດແກ້ SVN ຂອງ metaconfig ໂຄງການ.
ຈໍານວນສະບັບຂອງ metaconfig ໂຄງການ.
ມະຫາພາກເຫຼົ່ານັ້ນສ່ວນຫຼາຍແມ່ນໃຊ້ເພື່ອກໍານົດ metaconfig ຮຸ່ນທີ່ສ້າງ a
ໂດຍສະເພາະ ກໍາຫນົດຄ່າ script ແລະສໍາລັບຊຸດທີ່ມັນເຮັດໄດ້. ທີ່ຢູ່ e-mail ຂອງ
ຜູ້ຮັກສາແມ່ນ hardwired ໃນຄໍາແນະນໍາຊັ້ນນໍາທີ່ ກໍາຫນົດຄ່າ ພິມເມື່ອເລີ່ມຕົ້ນ.
ທີ່ຜ່ານມາ metaconfig ສະບັບເຂົ້າໃຈ syntax ທົ່ວໄປຫຼາຍຂອງແບບຟອມ:
<$variable>
ເຊິ່ງຖືກແທນທີ່ໃນເວລາ Configure-generation ໂດຍຄ່າຂອງ ຕົວແປ ເອົາມາຈາກຂອງເຈົ້າ
. ກະເປົາ ໄຟລ໌. ໃນທີ່ສຸດ, ຮູບແບບ macro ທີ່ໃຊ້ສາຍແບບເກົ່າຈະຫາຍໄປ, ແລະ <$baserev>
ຈະທົດແທນ ໃນທຸກຫນ່ວຍງານທີ່ສະຫນອງ.
ພິເສດ ຫນ່ວຍ
ຫນ່ວຍງານພິເສດຕໍ່ໄປນີ້ຖືກໃຊ້ເພື່ອແຍກລະຫັດແລະໃຫ້ລະດັບທີ່ສູງຂຶ້ນ
ຫນ້າທີ່. ພວກເຂົາເຈົ້າອາດຈະຜະລິດ Shell script ທີ່ສາມາດເປັນແຫຼ່ງຫຼື shell
ຕົວແປທີ່ສາມາດເປັນ ການປະເມີນ'ed. ການຖ່າຍທອດພາລາມິເຕີແມ່ນເຮັດຜ່ານຕົວແປທີ່ຮູ້ດີ, ບໍ່ວ່າຈະ
ຊື່ ຫຼື ບໍ່ເປີດເຜີຍຊື່ ເຊັ່ນ $1, $2, ແລະອື່ນໆ... (ເຊິ່ງສາມາດຕັ້ງໄດ້ງ່າຍຜ່ານ shell ທີ່ກໍານົດໄວ້
ຜູ້ປະກອບການ). ເມື່ອໃດ ກໍາຫນົດຄ່າ ປະຕິບັດ, ມັນສ້າງແລະເຂົ້າໄປໃນ a UU ໄດເລກະທໍລີ, ດັ່ງນັ້ນທຸກໆ
script ທີ່ຜະລິດຢູ່ໃນນັ້ນແລະບໍ່ແຊກແຊງໄຟລ໌ຈາກຊຸດຂອງທ່ານ.
ນີ້ແມ່ນຫົວ ໜ່ວຍ sepcial ທີ່ທ່ານຄວນຮູ້ກ່ຽວກັບ, ແລະວິທີການນໍາໃຊ້ພວກມັນ.
Cppsym.U
ຫນ່ວຍງານນີ້ຜະລິດ Shell script ເອີ້ນວ່າ Cppsym, ຊຶ່ງສາມາດຖືກນໍາໃຊ້ເພື່ອກໍານົດ
ບໍ່ວ່າຈະເປັນສັນຍາລັກໃດໆໃນບັນຊີລາຍຊື່ຖືກກໍານົດໂດຍ C preprocessor ຫຼື C compiler ທີ່ທ່ານມີ
ລະບຸ. ມັນສາມາດກໍານົດສະຖານະພາບຂອງສັນຍາລັກໃດກໍ່ຕາມ, ເຖິງແມ່ນວ່າສັນຍາລັກຢູ່ໃນ
(ລາຍການຄຸນລັກສະນະ) ຖືກກໍານົດໄດ້ງ່າຍກວ່າ.
Csym.U
ອັນນີ້ກຳນົດຕົວແປ $csym shell, ໃຊ້ພາຍໃນໂດຍ ກໍາຫນົດຄ່າ ເພື່ອກວດເບິ່ງວ່າ a
ສັນຍາລັກ C ໄດ້ຖືກກໍານົດຫຼືບໍ່. ການນໍາໃຊ້ປົກກະຕິແມ່ນ:
ກໍານົດຜົນໄດ້ຮັບສັນຍາລັກ [-fva] [ກ່ອນຫນ້າ]
eval $csym
ທີ່ຈະກໍານົດ ຜົນ variable ກັບ 'true' ຖ້າຟັງຊັນ [-f], variable [-v] ຫຼື
array [-a] ຖືກກໍານົດ, 'false' ຖ້າບໍ່ດັ່ງນັ້ນ. ຖ້າຄ່າທີ່ຜ່ານມາແມ່ນໃຫ້ແລະ -r
ສະຫຼັບໄດ້ຖືກສະຫນອງໃຫ້ ກໍາຫນົດຄ່າ (ເບິ່ງ ກໍາຫນົດຄ່າ ທາງເລືອກໃນການ ວັກ), ຫຼັງຈາກນັ້ນ
ມູນຄ່າແມ່ນຖືກນໍາໃຊ້ຄືນໃຫມ່ໂດຍບໍ່ມີການສອບຖາມ.
ວິທີການຄິດໄລ່ນີ້ແມ່ນຂຶ້ນກັບຄໍາຕອບທີ່ຜູ້ໃຊ້ໃຫ້ຄໍາຖາມ
ກໍາຫນົດຄ່າ ຈະຖາມກ່ຽວກັບວ່າມັນຄວນຈະດໍາເນີນການ nm ການສະກັດເອົາຫຼືບໍ່. ຖ້າ
ການສະກັດເອົາໄດ້ຖືກປະຕິບັດ, ຫນ່ວຍງານພຽງແຕ່ເບິ່ງຜ່ານບັນຊີລາຍຊື່ສັນຍາລັກ, ຖ້າບໍ່ດັ່ງນັ້ນ
ມັນປະຕິບັດການທົດສອບການເຊື່ອມຕໍ່ລວບລວມ, ເວັ້ນເສຍແຕ່ -r ໄດ້ຮັບການນໍາໃຊ້ຄືນໃຫມ່ການຄິດໄລ່ທີ່ຜ່ານມາ
ຄຸນຄ່າ, ຕາມທໍາມະຊາດ ...
End.U
ໂດຍການຄັດລອກຫນ່ວຍນີ້ເຂົ້າໄປໃນສ່ວນຕົວຂອງເຈົ້າ U ໄດເລກະທໍລີ ແລະການຂຶ້ນກັບການຕໍ່ເຕີມກ່ຽວກັບ
?ເຮັດ: ເສັ້ນ, ທ່ານສາມາດບັງຄັບໃຫ້ຫນ່ວຍງານໃດນຶ່ງຖືກບັນຈຸເຂົ້າໃນ ກໍາຫນົດຄ່າ ເຖິງແມ່ນວ່າມັນບໍ່ແມ່ນ
ຖ້າບໍ່ດັ່ງນັ້ນຕ້ອງການ. ບາງຫນ່ວຍພຽງແຕ່ອາດຈະຖືກບັງຄັບໃຫ້ເຂົ້າໄປໃນ ກໍາຫນົດຄ່າ ທາງນັ້ນ.
Filexp.U
ຫນ່ວຍງານນີ້ຜະລິດ Shell script filexp ເຊິ່ງຈະຂະຫຍາຍຊື່ໄຟລ໌ເລີ່ມຕົ້ນດ້ວຍ
tildes. ການນໍາໃຊ້ປົກກະຕິແມ່ນ:
exp_name=`./filexp $name`
ເພື່ອກໍານົດຊື່ໄຟລ໌ທີ່ຂະຫຍາຍຢູ່ໃນ exp_name.
Findhdr.U
ຫນ່ວຍນີ້ຜະລິດ a findhdr script ທີ່ຖືກນໍາໃຊ້ເພື່ອຊອກຫາໄຟລ໌ header ໃນ
$usrinc ຫຼືສະຖານທີ່ stranger ອື່ນໆໂດຍໃຊ້ຄວາມສາມາດ cpp. script ໄດ້ຖືກມອບໃຫ້
ລວມເອົາຊື່ພື້ນຖານຂອງໄຟລ໌ເຊັ່ນ 'stdio.h' ຫຼື 'sys/file.h' ແລະມັນກັບຄືນເສັ້ນທາງເຕັມຂອງ
ໄຟລ໌ inlcude ແລະສະຖານະສູນຖ້າພົບ, ຫຼືສະຕຣິງຫວ່າງເປົ່າແລະສະຖານະທີ່ບໍ່ແມ່ນສູນ
ຖ້າໄຟລ໌ບໍ່ສາມາດຕັ້ງຢູ່.
Getfile.U
ຫນ່ວຍງານນີ້ຜະລິດລະຫັດ shell ເລັກນ້ອຍທີ່ຕ້ອງໄດ້ຮັບການແຫຼ່ງເພື່ອໃຫ້ໄດ້ໄຟລ໌
ຊື່ແລະເຮັດໃຫ້ການກວດສອບສຸຂະພາບບາງ. ທາງເລືອກ, ການຂະຫຍາຍ ~ ຊື່ແມ່ນດໍາເນີນການ.
ເພື່ອໃຊ້ເຄື່ອງນີ້, $rp ແລະ $dflt ຕ້ອງຖືຄໍາຖາມແລະຄໍາຕອບເລີ່ມຕົ້ນ, ເຊິ່ງ
ຈະຖືກສົ່ງຜ່ານເປັນ ອ່ານຂອງຂ້ອຍ script (ເບິ່ງທີ່ຈະມາເຖິງ Myread.U) The $fn
ຕົວແປຄວບຄຸມການດໍາເນີນການແລະຜົນໄດ້ຮັບແມ່ນກັບຄືນສູ່ $ans.
ເພື່ອຊອກຫາໄຟລ໌ຫຼືໄດເລກະທໍລີ, ໃສ່ 'f' ຫຼື 'd' ເຂົ້າໃນ f~/. ຖ້າ '~' ປາກົດ, ຫຼັງຈາກນັ້ນ ~ ຊື່
ອະນຸຍາດໃຫ້ທົດແທນ. ຖ້າ '/' ປາກົດ, ພຽງແຕ່ຊື່ເສັ້ນທາງຢ່າງແທ້ຈິງຖືກຍອມຮັບແລະ
~ ການປ່ຽນຊື່ແມ່ນໄດ້ຮັບການຂະຫຍາຍສະເຫມີກ່ອນທີ່ຈະກັບຄືນມາ. ຖ້າ '+' ຖືກລະບຸ,
ການກວດສອບການມີຢູ່ແມ່ນຂ້າມໄປ. ຖ້າ 'n' ປາກົດຢູ່ພາຍໃນ $fn, ຫຼັງຈາກນັ້ນຜູ້ໃຊ້ໄດ້ຖືກອະນຸຍາດໃຫ້
ຕອບ 'ບໍ່'.
ໂດຍປົກກະຕິແລ້ວ, ເວັ້ນເສຍແຕ່ວ່າທ່ານຮ້ອງຂໍໃຫ້ມີການເຄື່ອນຍ້າຍ, ~ ການປ່ຽນຊື່ເກີດຂຶ້ນເມື່ອຮ້ອງຂໍ.
ຢ່າງໃດກໍຕາມ, ມີບາງຄັ້ງທີ່ທ່ານຕ້ອງການທີ່ຈະ bypass portability ແລະບັງຄັບ
ການທົດແທນ. ເຈົ້າອາດຈະໃຊ້ຕົວອັກສອນ 'e' (ຂະຫຍາຍ) ເພື່ອເຮັດແນວນັ້ນ.
ຖ້າໃຊ້ປະເພດ 'l' (locate) ພິເສດ, ຫຼັງຈາກນັ້ນ $fn ຕົວແປຕ້ອງລົງທ້າຍດ້ວຍ ':',
ຕິດຕາມດ້ວຍຊື່ພື້ນຖານຂອງໄຟລ໌. ຖ້າຄໍາຕອບແມ່ນໄດເລກະທໍລີ, ຊື່ພື້ນຖານຂອງໄຟລ໌ຈະເປັນ
ເພີ່ມເຕີມກ່ອນທີ່ຈະທົດສອບການມີຢູ່ຂອງໄຟລ໌. ນີ້ແມ່ນເປັນປະໂຫຍດໃນຄໍາຖາມທີ່ມີຮູບແບບສະຖານທີ່
ເຊັ່ນນີ້:
dflt='~ຂ່າວ/lib'
: ບໍ່ຈໍາເປັນຕ້ອງລະບຸ 'd' ຫຼື 'f' ເມື່ອ 'l' ຖືກໃຊ້
fn='l~:active'
rp='ໄຟລ໌ທີ່ໃຊ້ວຽກຢູ່ໃສ?'
. ./getfile
active="$ans"
ນອກຈາກນັ້ນ, ຕົວອັກສອນ 'p' (path) ອາດຈະຖືກນໍາໃຊ້ຮ່ວມກັບ 'l' ເພື່ອບອກ
ເອົາໄຟລ ວ່າຄໍາຕອບທີ່ບໍ່ມີ '/' ໃນມັນຄວນຈະໄດ້ຮັບການຍອມຮັບ, ສົມມຸດວ່າມັນຈະ
ຢູ່ໃນເສັ້ນທາງຂອງທຸກຄົນໃນເວລາທີ່ມູນຄ່ານີ້ຈະມີຄວາມຈໍາເປັນ.
ຍັງເປັນປະໂຫຍດແມ່ນຄວາມເປັນໄປໄດ້ທີ່ຈະລະບຸບັນຊີລາຍຊື່ຂອງຄໍາຕອບທີ່ຄວນຈະໄດ້ຮັບການຍອມຮັບ
verbatim, bypassing ການກວດສອບທັງຫມົດ. ລາຍຊື່ນີ້ຕ້ອງຢູ່ໃນວົງເລັບ ແລະລາຍການ
ຕ້ອງແຍກເຄື່ອງໝາຍຈຸດ, ບໍ່ມີຊ່ອງຫວ່າງ. ຢ່າລືມອ້າງເຖິງ
ສະຕຣິງທີ່ເປັນຜົນມາຈາກວົງເລັບມີຄວາມໝາຍຕໍ່ກັບແກະ. ຕົວຢ່າງ:
dflt='/bin/install'
fn='/fe~(ຕິດຕັ້ງ,./install)'
rp='ໃຊ້ໂປຣແກຣມຕິດຕັ້ງອັນໃດ?'
. ./getfile
ຕິດຕັ້ງ = "$ans"
ຈະໃຫ້ຜູ້ໃຊ້ພຽງແຕ່ລະບຸເສັ້ນທາງທີ່ມີຄຸນວຸດທິຢ່າງເຕັມທີ່ໂດຍອ້າງອີງໃສ່ໄຟລ໌ທີ່ມີຢູ່,
ແຕ່ຍັງຄົງອະນຸຍາດໃຫ້ຄໍາຕອບພິເສດ "ຕິດຕັ້ງ" ແລະ "./install" ເທົ່າທີ່ເປັນ (ສົມມຸດວ່າ
ແນ່ນອນວ່າບາງສິ່ງບາງຢ່າງຈະຈັດການກັບພວກເຂົາໂດຍສະເພາະໃນພາຍຫລັງໃນລະບົບຕ່ອງໂສ້ນັບຕັ້ງແຕ່ພວກເຂົາເຮັດ
ບໍ່ສອດຄ່ອງກັບກອບທີ່ຄາດໄວ້ໂດຍທົ່ວໄປ).
ຖ້າຄໍາຕອບຂອງຄໍາຖາມແມ່ນ 'ບໍ່ມີ', ຫຼັງຈາກນັ້ນການກວດສອບການມີຢູ່ແມ່ນຂ້າມໄປແລະ
ສະຕຣິງຫວ່າງເປົ່າຖືກສົ່ງຄືນ. ໃຫ້ສັງເກດວ່ານັບຕັ້ງແຕ່ ເອົາໄຟລ ໂທ ອ່ານຂອງຂ້ອຍ ພາຍໃນ, ທັງຫມົດ
ຄຸນນະສົມບັດທີ່ມີຢູ່ກັບ ອ່ານຂອງຂ້ອຍ ສະຫມັກທີ່ນີ້ເພື່ອ.
ຖ້າຕ້ອງການມູນຄ່າຂະຫຍາຍຢ່າງສົມບູນ (ຕົວຢ່າງໃນ Makefile), ທ່ານອາດຈະໃຊ້
ໄດ້ $ansexp ຕົວແປທີ່ສະເຫມີຖືກຕັ້ງຄ່າຢ່າງຖືກຕ້ອງໂດຍ ເອົາໄຟລ ເປັນການຂະຫຍາຍຕົວ
ສະບັບຂອງ $ans. ແນ່ນອນ, ມັນຈະບໍ່ຂະຫຍາຍ ~ ຊື່ຖ້າທ່ານບໍ່ອະນຸຍາດໃຫ້ມັນຢູ່ໃນ
ສະຖານທີ່ທໍາອິດໃນ $fn ຕົວແປ.
Inhdr.U
ຫນ່ວຍງານນີ້ຜະລິດ $inhdr shell variable, ໃຊ້ພາຍໃນໂດຍ ກໍາຫນົດຄ່າ ການກວດສອບ
ບໍ່ວ່າຈະເປັນຊຸດຂອງຫົວຂໍ້ມີຢູ່ຫຼືບໍ່. ການນໍາໃຊ້ປົກກະຕິແມ່ນ:
ກໍານົດ header i_header [ header2 i_header2 ... ]
eval $inhdr
ນີ້ຈະພິມຂໍ້ຄວາມ, ໂດຍກ່າວວ່າ header ໄດ້ພົບເຫັນຫຼືບໍ່ແລະກໍານົດ
i_header ປ່ຽນແປງຕາມຄວາມເຫມາະສົມ. ຖ້າຫຼາຍກວ່າຫນຶ່ງຫົວຖືກລະບຸແລະທໍາອິດ
ບໍ່ພົບ header, ພວກເຮົາພະຍາຍາມອັນຕໍ່ໄປ, ຈົນກ່ວາບັນຊີລາຍຊື່ຫວ່າງເປົ່າຫຼືຫນຶ່ງຈະພົບເຫັນ.
Inlibc.U
ຫນ່ວຍງານນີ້ຜະລິດ $inlibc shell variable, ໃຊ້ພາຍໃນໂດຍ ກໍາຫນົດຄ່າ ການກວດສອບ
ບໍ່ວ່າຈະເປັນຟັງຊັນ C ທີ່ຖືກກໍານົດໄວ້ຫຼືບໍ່. ການນໍາໃຊ້ປົກກະຕິແມ່ນ:
ຕັ້ງຟັງຊັນ d_func
eval $inlibc
ມັນຈະພິມຂໍ້ຄວາມ, ໂດຍກ່າວວ່າຟັງຊັນໄດ້ພົບເຫັນຫຼືບໍ່ແລະກໍານົດ
$d_func ຕາມນັ້ນ. ພາຍໃນ, ມັນໄດ້ນໍາໃຊ້ $csym ປົກກະຕິ.
Loc.U
ຫນ່ວຍງານທີ່ສໍາຄັນນີ້ຜະລິດ Shell script loc ເຊິ່ງສາມາດໃຊ້ເພື່ອຊອກຫາບ່ອນໃດ
ໃນບັນຊີລາຍຊື່ຂອງໄດເລກະທໍລີ, ໄຟລ໌ທີ່ໃຫ້ຢູ່. ການໂຕ້ຖຽງທໍາອິດລະບຸໄຟລ໌ໄປຫາ
ຕັ້ງຢູ່, ການໂຕ້ຖຽງທີສອງແມ່ນສິ່ງທີ່ຈະຖືກສົ່ງຄືນຖ້າການຄົ້ນຫາລົ້ມເຫລວ, ແລະ
reamining arguments ແມ່ນບັນຊີລາຍຊື່ຂອງໄດເລກະທໍລີທີ່ໄຟລ໌ຈະຖືກຄົ້ນຫາ. ສໍາລັບ
ຕົວຢ່າງ:
dflt=`./loc sendmail.cf X / usr / lib /var/lib/sendmail / lib`
ຈະຕັ້ງ $dflt to X ຖ້າບໍ່ມີ sendmail.cf ໄຟລ໌ໄດ້ຖືກພົບເຫັນພາຍໃຕ້ລາຍຊື່,
ຫຼືບາງສິ່ງບາງຢ່າງເຊັ່ນ: /usr/lib/sendmail.cf ໃນບາງລະບົບ. ເບິ່ງນຳ Getfile.U.
MailAuthor.U
ຫນ່ວຍນີ້ຈໍາເປັນຕ້ອງຖືກລວມຢູ່ໃນເສັ້ນ ?MAKE: ຂອງ End.U ສ່ວນຕົວຂອງເຈົ້າເອງເພື່ອສ້າງ
ມັນເຂົ້າໄປໃນ ກໍາຫນົດຄ່າ. ມັນສະເຫນີໃຫ້ຜູ້ໃຊ້ລົງທະບຽນຕົນເອງກັບຜູ້ຂຽນ, ທາງເລືອກ
ໄດ້ຮັບການແຈ້ງເຕືອນເມື່ອມີ patches ໃໝ່ມາຮອດ ຫຼືໄດ້ຮັບພວກມັນໂດຍອັດຕະໂນມັດເມື່ອອອກ.
ທ່ານຈໍາເປັນຕ້ອງຕິດຕັ້ງ ຈົດໝາຍ ເພື່ອເຮັດສິ່ງນີ້ (ຢ່າງຫນ້ອຍ 3.0).
MailList.U
ຫນ່ວຍນີ້ຈໍາເປັນຕ້ອງຖືກລວມຢູ່ໃນເສັ້ນ ?MAKE: ຂອງ End.U ສ່ວນຕົວຂອງເຈົ້າເອງເພື່ອສ້າງ
ມັນເຂົ້າໄປໃນ ກໍາຫນົດຄ່າ. ມັນສະເຫນີໃຫ້ຜູ້ໃຊ້ສາມາດຈອງຫຼືຍົກເລີກການຈອງບັນຊີລາຍຊື່ທາງໄປສະນີ
ບ່ອນທີ່ການສົນທະນາທີ່ກ່ຽວຂ້ອງກັບຊຸດກໍາລັງດໍາເນີນຢູ່. ທ່ານຈໍາເປັນຕ້ອງດໍາເນີນການ packinit
ແລະຕອບຄໍາຖາມທີ່ກ່ຽວຂ້ອງກັບບັນຊີລາຍການທາງໄປສະນີເພື່ອກໍານົດຕົວແປທີ່ເຫມາະສົມໃນຂອງທ່ານ
. ກະເປົາ ກ່ອນທີ່ຫນ່ວຍງານນີ້ອາດຈະດໍາເນີນການ.
Myinit.U
ສຳເນົາໜ່ວຍນີ້ໄປໃສ່ສ່ວນຕົວຂອງເຈົ້າ U ໄດເລກະທໍລີເພື່ອເພີ່ມຄ່າເລີ່ມຕົ້ນຂອງທ່ານເອງໃຫ້ກັບບາງອັນ
ຕົວແປພາຍໃນ. ໜ່ວຍນີ້ຖືກບັນຈຸເຂົ້າໃນ ກໍາຫນົດຄ່າ ຫຼັງຈາກທັງຫມົດຄ່າເລີ່ມຕົ້ນ
ການເລີ່ມຕົ້ນໄດ້ຖືກເຮັດແລ້ວ.
Myread.U
ຫນ່ວຍງານນີ້ຜະລິດ ອ່ານຂອງຂ້ອຍ shell script ທີ່ຈະຕ້ອງມີແຫຼ່ງເພື່ອເຮັດ a
ອ່ານ. ມັນອະນຸຍາດໃຫ້ shell escapes, ການກໍາຫນົດຄ່າເລີ່ມຕົ້ນແລະການປະເມີນພາລາມິເຕີ, ເປັນ
ເອກະສານຢູ່ໃນຫນ່ວຍ Instruct.U. ມັນຍັງອະນຸຍາດໃຫ້ການຕັ້ງຄ່າແບບເຄື່ອນໄຫວຂອງ -d ທາງເລືອກ,
ເຊິ່ງຈະຖືກນໍາໃຊ້ສໍາລັບການທີ່ຍັງເຫຼືອຂອງການປະຕິບັດສະຄິບ.
ເພື່ອໃຊ້ເຄື່ອງນີ້, $rp ຕ້ອງຖືຄໍາຖາມແລະ $dflt ຄວນມີຄ່າເລີ່ມຕົ້ນ
ຄໍາຕອບ. ຄໍາຖາມຈະຖືກພິມໂດຍ script ຕົວຂອງມັນເອງ, ແລະຜົນໄດ້ຮັບແມ່ນກັບຄືນມາ
ໃນ $ans ຕົວແປ.
ນີ້ແມ່ນການໃຊ້ງານປົກກະຕິ:
dflt='y'
rp='ຄຳຖາມ?'
. ./myread
value="$ans"
ເບິ່ງຫນ່ວຍງານຕົວມັນເອງສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ.
Oldconfig.U
ໜ່ວຍນີ້ຕ້ອງເປັນສ່ວນໜຶ່ງຂອງການເພິ່ງພາອາໄສຂອງເຈົ້າບໍ?ເຮັດ: ເສັ້ນເມື່ອບາງໜ່ວຍຂອງເຈົ້າພະຍາຍາມ
ເພື່ອໃຊ້ຄືນຄ່າສັນຍາລັກເກົ່າ. ຫນ່ວຍງານນີ້ແມ່ນຮັບຜິດຊອບໃນການໄດ້ຮັບຄໍາຕອບເກົ່າ
ຈາກ config.sh ຫຼືໃຫ້ຄໍາແນະນໍາທີ່ເປັນປະໂຫຍດໃນເວລາທີ່ແລ່ນຢູ່ໃນເວທີທີ່ໃຫ້ສໍາລັບ
ຄັ້ງທໍາອິດ. ເບິ່ງ ກໍາຫນົດຄ່າ ຄໍາແນະນໍາ ວັກສໍາລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບຄໍາແນະນໍາ.
ຄຳນຳໜ້າ.U
ຈຸດປະສົງຂອງຫນ່ວຍບໍລິການນີ້ແມ່ນເພື່ອກວດສອບການປ່ຽນແປງໃນລະບົບຄໍານໍາຫນ້າການຕິດຕັ້ງເພື່ອ
recompute ອັດຕະໂນມັດທີ່ເຫມາະສົມຄ່າເລີ່ມຕົ້ນຈາກຄໍາຕອບທີ່ຜ່ານມາ. ມັນຂຶ້ນກັບ
ມູນຄ່າຂອງ $oldprefix ຕົວແປທີ່ຖືໄດເລກະທໍລີ prefix ກ່ອນຫນ້າເມື່ອມັນ
ມີການປ່ຽນແປງ, ແລະຫວ່າງເປົ່າ. ຕົວຢ່າງ, ຖ້າຄໍານໍາຫນ້າຖືກປ່ຽນຈາກ / ເລືອກ to
/ usr / ທ້ອງຖິ່ນ, ຫຼັງຈາກນັ້ນໄດເລກະທໍລີການຕິດຕັ້ງຖານສອງກ່ອນຫນ້າຈະຖືກປ່ຽນຈາກ
/opt/bin to / usr / local / bin, ຫຼືຈະຍັງຄົງບໍ່ປ່ຽນແປງຖ້າຫາກວ່າມັນແມ່ນ, ເວົ້າວ່າ, / ຖັງ.
ທ່ານຈໍາເປັນຕ້ອງໂທຫາ ທີ່ກໍານົດໄວ້ ກ່ອນທີ່ຈະອອກ ການປະເມີນ on $prefixit, ເຊັ່ນວ່າ:
ຕັ້ງ dflt var [dir]
eval $prefixit
ເຊິ່ງຈະກໍານົດ $dflt to $var or $prefix/dir ຂຶ້ນກັບວ່າຄໍານໍາຫນ້າຍັງຄົງຢູ່
ຄືກັນຫຼືບໍ່. ຖ້າ dir ແມ່ນສາຍ none, ຄ່າຊ່ອງດຽວໃນ $dflt ຖືກເກັບຮັກສາໄວ້ເປັນ -
ແມ່ນ, ເຖິງແມ່ນວ່າໃນເວລາທີ່ຄໍານໍາຫນ້າມີການປ່ຽນແປງ. ຖ້າ dir ຖືກລະເວັ້ນ, ຈາກນັ້ນ $dflt ຖືກຕັ້ງເປັນຫວ່າງເປົ່າ
string ຖ້າຄໍານໍາຫນ້າມີການປ່ຽນແປງ, to $var ຖ້າບໍ່ດັ່ງນັ້ນ.
ຄຳນຳໜ້າ.U
ຈຸດປະສົງຂອງຫນ່ວຍງານ thit ແມ່ນຄ້າຍຄືກັນກັບຂອງ Prefixit.U, ie ມັນຊ່ວຍແກ້ໄຂ.
ສະຕຣິງເລີ່ມຕົ້ນເພື່ອຮອງຮັບການປ່ຽນແປງຄໍານໍາຫນ້າ. ຢ່າງໃດກໍຕາມ, shell ມີການປ່ຽນແປງ $prefixup,
ໃນເວລາທີ່ການປະເມີນຜົນ, ພຽງແຕ່ຈະຟື້ນຟູ ~ ການຂະຫຍາຍຊື່, ຄວນນໍາໃຊ້ຄໍານໍາຫນ້າເຊັ່ນການຫນີ
ກົນໄກ. ໃຊ້ມັນເປັນ:
ຕັ້ງ dflt
eval $prefixup
ກ່ອນທີ່ຈະກະຕຸ້ນເຕືອນຜ່ານ ເອົາໄຟລ ຕົວຢ່າງ. ຖ້າຄໍານໍາຫນ້າບໍ່ໄດ້ໃຊ້ ~ ຊື່
ການຂະຫຍາຍຕົວ, ຫຼັງຈາກນັ້ນຂ້າງເທິງຈະເປັນ no-op ກ່ຽວກັບ y ປ່ຽນແປງໄດ້, ຕາມທໍາມະຊາດ.
Typedef.U
ຫນ່ວຍງານນີ້ຜະລິດ $typedef shell variable, ໃຊ້ພາຍໃນໂດຍ ກໍາຫນົດຄ່າ ການກວດສອບ
ບໍ່ວ່າຈະມີ typedef ຫຼືບໍ່. ການນໍາໃຊ້ປົກກະຕິແມ່ນ:
ຕັ້ງ typedef val_t default [ປະກອບມີ]
eval $typedef
ນີ້ຈະກໍານົດຕົວແປ val_t ກັບມູນຄ່າຂອງ Default ຖ້າ typedef ບໍ່ພົບ
ໃນບັນດາລາຍການປະກອບມີໄຟລ໌, ຫຼືເພື່ອ ພິມປະເພດ ຖ້າພົບເຫັນ. ຖ້າບໍ່ປະກອບມີໄຟລ໌
ລະບຸໄວ້, ຫນ່ວຍບໍລິການເບິ່ງຢູ່ໃນ ເທົ່ານັ້ນ. ຖ້າຫາກວ່າທ່ານລະບຸບາງຢ່າງປະກອບມີ, ພຽງແຕ່
ເຫຼົ່ານັ້ນແມ່ນເບິ່ງຢູ່.
Unix.U
ຈຸດປະສົງຂອງຫນ່ວຍງານນີ້ແມ່ນເພື່ອກໍານົດບາງ UNIX-isms ທົ່ວໄປທີ່ສຸດໂດຍຜ່ານຕົວແປ
ເຊິ່ງສາມາດຖືກປ່ຽນແປງຈາກເສັ້ນຄໍາສັ່ງຫຼືຜ່ານໄຟລ໌ຄໍາແນະນໍາທີ່ເຫມາະສົມ. ໂດຍສະເພາະ,
$_exe, $_o ແລະ $_a ຖືກກໍານົດ. ຫນ່ວຍງານທັງຫມົດຄວນອ້າງເຖິງ $_o ແລະບໍ່ໃຫ້ .o ໂດຍກົງ.
ໄດ້ '.' ແມ່ນສ່ວນຫນຶ່ງຂອງຕົວແປເຫຼົ່ານີ້.
Setvar.U
ຫນ່ວຍງານນີ້ຜະລິດຕົວແປ, ເຊິ່ງຖືກນໍາໃຊ້ພາຍໃນໂດຍ ກໍາຫນົດຄ່າ ກໍານົດເປັນ
ກໍານົດຄ່າ /undef ກັບສັນຍາລັກທີ່ໃຫ້, emitting ເຕືອນໃນເວລາທີ່ມັນມີການປ່ຽນແປງຢ່າງກະທັນຫັນ
ຈາກຄ່າທີ່ຜ່ານມາ. ຕົວຢ່າງ:
val="$define"
ຕັ້ງ d_variable
eval $setvar
ຖ້າກ່ອນຫນ້ານີ້ $d_variable ຄ່າບໍ່ແມ່ນ null ແລະ $val ແມ່ນແຕກຕ່າງກັນ, "whoa"
ອອກຄໍາເຕືອນ.
ວ້າວ
ຫນ່ວຍງານນີ້ຜະລິດ whoa script, ເຊິ່ງ emits ການເຕືອນໄພໃນເວລາທີ່ ມູນຄ່າ ໃນຕົວແປ
ຊື່ຂອງໃຜ $var ບໍ່ຄືກັບຄ່າເກົ່າເກົ່າຂອງມັນທີ່ຖືຢູ່ໃນ $ ແມ່ນ. ຕາມ
ກັບມາ, $td ແລະ $tu ຖືມູນຄ່າທີ່ເຫມາະສົມກັບ ກໍານົດ or undef ຕົວແປ. ເບິ່ງ
ຕົວຢ່າງໃນ Inlibc.U.
ບຶງທາດຫຼວງ ໂປເຊດເຊີກ່ອນ
ແຕ່ລະຫນ່ວຍທີ່ຈະລວມຢູ່ໃນ ກໍາຫນົດຄ່າ ແມ່ນແລ່ນຜ່ານຕົວປະມວນຜົນກ່ອນສ້າງ. ກ່ອນ
ຖະແຫຼງການຂອງໂປເຊດເຊີຖືກນໍາສະເຫນີໂດຍຕົວອັກສອນ '@' ('#' ແມ່ນຄໍາຄິດຄໍາເຫັນຂອງແກະ
ລັກສະນະ). ມັນເຮັດຫນ້າທີ່ພຽງແຕ່ເປັນ C pre-processor ເຮັດແຕ່ອະນຸຍາດໃຫ້ສໍາລັບ shell ແລະ perl
ໜີ. ນີ້ແມ່ນຫນ້າທີ່ທີ່ມີຢູ່:
@ຖ້າ ການສະແດງອອກ
If ການສະແດງອອກ ເປັນຄວາມຈິງ, ສືບຕໍ່ການໂຫຼດລະຫັດຈົນກ່ວາ @end, @elsif ຫຼື @else.
@elsif ການສະແດງອອກ
ທາງເລືອກ. ຖ້າ ການສະແດງອອກ ເປັນຄວາມຈິງ, ສືບຕໍ່ການໂຫຼດລະຫັດຈົນກ່ວາ @end,
ອື່ນ @elsif ຫຼື @else.
@else ລະຫັດເລີ່ມຕົ້ນທີ່ຈະໂຫລດຖ້າຫາກວ່າ @if ການສະແດງອອກ ບໍ່ຖືກຕ້ອງ ແລະບໍ່ມີອັນໃດອັນໃດ
ທາງເລືອກ @elsif ກົງກັນ. ໂຫຼດຈົນກ່ວາ @end.
@end ປິດຄຳຖະແຫຼງການໂຫຼດຕາມເງື່ອນໄຂທີ່ເປີດໂດຍ @if.
@ກໍານົດ ສັນຍາລັກ
ບອກຕົວປະມວນຜົນກ່ອນນັ້ນ ສັນຍາລັກ ໄດ້ຖືກກໍານົດຈາກນີ້ໄປ.
ເງື່ອນໄຂ ການສະແດງອອກ ສາມາດປະກອບມີຊື່ສັນຍາລັກ (ມູນຄ່າແມ່ນຄວາມຈິງຖ້າສັນຍາລັກຕ້ອງການຫຼື
ກໍານົດໂດຍຜ່ານ @ກໍານົດ ຫຼື shell/perl ຫນີ. ປະລໍາມະນູເຫຼົ່ານັ້ນສາມາດຖືກລວມເຂົ້າກັນໂດຍໃຊ້
ຕົວປະຕິບັດການ boolean ແບບດັ້ງເດີມ '!' ສໍາລັບການປະຕິເສດ, '&&' ສໍາລັບເຫດຜົນແລະ, ແລະ '||' ສໍາລັບເຫດຜົນ
ຫຼື.
ຂໍ້ຄວາມທີ່ປິດຢູ່ໃນວົງເລັບດຽວແມ່ນການທົດສອບແກະ, ໃນຂະນະທີ່ຂໍ້ຄວາມລະຫວ່າງຫ້າມລໍ້ສອງແມ່ນ
ການທົດສອບ perl. ຄືສໍານວນ:
{ ຫອຍ ຂໍ້ຄວາມ }
{{ perl ຂໍ້ຄວາມ }}
ແປເປັນ:
if ຫອຍ ຂໍ້ຄວາມ >/dev/null 2>&1; ຈາກນັ້ນອອກ 0; else ອອກຈາກ 1; ຟີ
ຖ້າ (perl ຂໍ້ຄວາມ) {ອອກ 0;} else {ອອກ 1;}
ແລະສະຖານະການອອກແມ່ນໃຊ້ໃນແບບມາດຕະຖານເພື່ອໃຫ້ໄດ້ຄ່າ boolean, ie 0 ແມ່ນ true ແລະ
ທຸກສິ່ງທຸກຢ່າງອື່ນແມ່ນບໍ່ຖືກຕ້ອງ. ໃຫ້ສັງເກດວ່າພຽງແຕ່ເງື່ອນໄຂທີ່ງ່າຍດາຍສາມາດສະແດງອອກໃນ perl, ຈົນກ່ວາ
ບາງລະຫັດຊັບຊ້ອນສາມາດໂຫລດໄດ້ພາຍໃນ metaconfig ແລະປະຕິບັດ.
ໂປເຊດເຊີທີ່ຕິດຕັ້ງໄວ້ກ່ອນສາມາດຖືກນໍາໃຊ້ເພື່ອປັບບາງຫນ່ວຍງານຢ່າງລະອຽດ (ເບິ່ງ d_gethname.U ສໍາລັບ
ຕົວຢ່າງທີ່ສັບສົນ) ອີງຕາມສັນຍາລັກທີ່ໃຊ້ຕົວຈິງໂດຍໂຄງການຫຼືໄຟລ໌
ມີຢູ່ໃນການແຈກຢາຍ. ສໍາລັບຕົວຢ່າງ, ໄດ້ Oldconfig.U ໃຊ້ການທົດສອບເຊັ່ນ:
@if {test -d../hints}
ແລະ ກໍາຫນົດຄ່າ ຈະມີລະຫັດທີ່ອີງຕາມຄໍາແນະນໍາພຽງແຕ່ຖ້າຫາກວ່າມີ a ຄໍາແນະນໍາ ໄດເລກະທໍລີໃນ
ໄດເລກະທໍລີລະດັບສູງສຸດຂອງແພັກເກັດ. ໃຫ້ສັງເກດວ່າການທົດສອບແມ່ນແລ່ນມາຈາກພາຍໃນ '.MT' ລະບົບ,
ເພາະສະນັ້ນ, ຕ້ອງການ '../' ໃນການທົດສອບ.
ໂປເຊດເຊີເບື້ອງຕົ້ນຍັງສາມາດຖືກນໍາໃຊ້ເພື່ອຫຼີກເວັ້ນການໃສ່ລະຫັດທີ່ບໍ່ມີປະໂຫຍດໃນເວລາທີ່ສັນຍາລັກບໍ່ແມ່ນ
ກໍານົດ. ຫນ່ວຍງານທີ່ກໍານົດຫຼາຍກວ່າຫນຶ່ງສັນຍາລັກສາມາດຖືກປົກປ້ອງດ້ວຍວິທີນັ້ນ (ນັບຕັ້ງແຕ່ຫນ່ວຍງານແມ່ນ
ໂຫຼດທັງໝົດ) ໂດຍການລວບລວມລະຫັດທີ່ຂຶ້ນກັບສັນຍາລັກພາຍໃນຄູ່ @if/@end. ສໍາລັບ
ຕົວຢ່າງ:
@if I_TIME || I_SYS_TIME || I_SYS_TIME_KERNEL
need_time_h='ຈິງ'
@ອື່ນໆ
need_time_h='false'
@ຈົບ
ຈະທົດສອບວ່າລະຫັດແຫຼ່ງເຮັດໃຫ້ການນໍາໃຊ້ຫນຶ່ງໃນສາມສັນຍາລັກທີ່ຄວບຄຸມ
ໄດ້ ເວລາ or sys/time.h ລວມແລະກໍານົດສັນຍາລັກ shell ຕາມຄວາມເຫມາະສົມ. ທີ່ໃຫ້
ກໍາຫນົດຄ່າ ຄວາມຄິດເຫັນກ່ຽວກັບສິ່ງທີ່ແຫຼ່ງຂໍ້ມູນຕ້ອງການແລະຫຼີກເວັ້ນຂໍ້ເສຍຂອງການມີການແກ້ໄຂ
ຫນ່ວຍ frozen.
ຜ່ານເສັ້ນ '?W:', ທ່ານສາມາດໄດ້ຮັບການປະສົມປະສານທີ່ຫນ້າສົນໃຈ. ສໍາລັບຕົວຢ່າງ, ໄດ້ i_time.U ຫນ່ວຍບໍລິການ
ຕ້ອງການຮູ້ວ່າແຫຼ່ງ C ເຮັດໃຫ້ການນໍາໃຊ້ໃດໆຂອງ ໂຄງສ້າງ ເຂດເວລາ ປະເພດ. ດັ່ງນັ້ນ,
ເສັ້ນ:
?W::ເຂດເວລາ
ຖືກນໍາໃຊ້ສໍາລັບຜົນກະທົບຂ້າງຄຽງຂອງການກໍານົດສັນຍາລັກ ເຂດເວລາ ສໍາລັບຕົວປະມວນຜົນກ່ອນ. ໄດ້
ລະຫັດຫົວໜ່ວຍສາມາດເວົ້າວ່າ:
@if ເຂດເວລາ
ສໍາລັບ s_timezone ໃນ '-DS_TIMEZONE'''; ເຮັດ
@ອື່ນໆ
s_timezone=''
@ຈົບ
... ລະຫັດໂດຍໃຊ້ s_timezone ...
@if ເຂດເວລາ
ເຮັດ
@ຈົບ
ແລະມີ loop ພິເສດທີ່ພະຍາຍາມສອງຄ່າຕິດຕໍ່ກັນສໍາລັບ s_timezone ຕົວແປ, ແຕ່ວ່າພຽງແຕ່
ຖ້າຈໍາເປັນ.
ລ້າສະໄຫມ ສັນຍາລັກ
ສັນຍາລັກທີ່ລ້າສະໄຫມຖືກຮັກສາໄວ້ເພື່ອຜ່ອນຄາຍການປ່ຽນແປງກັບອາຍຸ metaconfig ໜ່ວຍ. ເວັ້ນເສຍແຕ່
ໄດ້ -o switch ແມ່ນຜ່ານໄປ metaconfig ເຂົາເຈົ້າຈະຖືກລະເລີຍ. ຢ່າງໃດກໍຕາມ, ເປັນ ລ້າສະໄຫມ file ຈະ
ຖືກສ້າງຂື້ນ, ບອກທ່ານວ່າໄຟລ໌ໃດທີ່ກໍາລັງໃຊ້ສັນຍາລັກລ້າສະໄຫມເຫຼົ່ານັ້ນແລະແມ່ນຫຍັງ
ແມ່ນສັນຍາລັກໃຫມ່ທີ່ຈະນໍາໃຊ້.
ຕະຫຼອດຊີວິດຂອງສັນຍາລັກລ້າສະໄຫມແມ່ນຫນຶ່ງການແກ້ໄຂຢ່າງເຕັມທີ່, ie ເຂົາເຈົ້າຈະໄດ້ຮັບການໂຍກຍ້າຍອອກໃນເວລາທີ່
ການປັບປຸງພື້ນຖານຕໍ່ໄປແມ່ນອອກ (ການຍົກລະດັບ patch ບໍ່ນັບແນ່ນອນ). ເພາະສະນັ້ນ, ມັນແມ່ນ
ສະຫລາດທີ່ຈະແປແຫຼ່ງຂອງທ່ານແລະເລີ່ມຕົ້ນການນໍາໃຊ້ສັນຍາລັກໃຫມ່ໄວເທົ່າທີ່ເປັນໄປໄດ້.
ກໍາຫນົດຄ່າ ຄໍາແນະນໍາ
ມັນອາດຈະເກີດຂຶ້ນວ່າເຫດຜົນການຕັ້ງຄ່າພາຍໃນເຮັດໃຫ້ທາງເລືອກທີ່ຜິດພາດ. ສໍາລັບ
ຕົວຢ່າງ, ໃນບາງເວທີ, the vfork() ການໂທລະບົບແມ່ນປະຈຸບັນແຕ່ແຕກຫັກ, ສະນັ້ນມັນຄວນຈະ
ບໍ່ໄດ້ຖືກນໍາໃຊ້. ມັນເປັນໄປບໍ່ໄດ້ທີ່ຈະລວມເອົາຄວາມຮູ້ນັ້ນຢູ່ໃນຫນ່ວຍງານຂອງຕົນເອງ, ເພາະວ່າ
ນັ້ນອາດຈະເປັນບັນຫາຊົ່ວຄາວທີ່ຜູ້ຂາຍຈະແກ້ໄຂໃນທີ່ສຸດ, ຫຼືບາງສິ່ງບາງຢ່າງທີ່
ໄດ້ຖືກນໍາສະເຫນີໂດຍການຍົກລະດັບ OS ໃຫມ່.
ຢ່າງໃດກໍ່ຕາມ, ສໍາລັບບັນຫານ້ອຍໆທັງໝົດເຫຼົ່ານັ້ນ ທີ່ເປັນລະບົບສະເພາະເກີນໄປ, metaconfig
ສະຫນອງການສະຫນັບສະຫນູນໄຟລ໌ຄໍາແນະນໍາ. ເພື່ອໃຊ້ມັນ, ທ່ານຈໍາເປັນຕ້ອງສ້າງ a ຄໍາແນະນໍາ ໄດເລກະທໍລີໃນ
ໄດເລກະທໍລີລະດັບສູງສຸດຂອງແພັກເກັດ, ແລະມີມັນໃນເວລາທີ່ທ່ານດໍາເນີນການ metaconfig. ທີ່ຈະໂຫລດ
ພາກສ່ວນທີ່ກ່ຽວຂ້ອງກັບຄໍາແນະນໍາຈາກ Oldconfig.U.
ຈາກນັ້ນ, ທ່ານອາດຈະກໍານົດໄວ້ລ່ວງຫນ້າຂອງຕົວແປຂອງ shell ບາງ ກໍາຫນົດຄ່າ ໃຊ້ໃນ OS ສະເພາະ
ໄຟລ໌ .sh. ມີລະຫັດຢູ່ໃນ Oldconfig.U ທີ່ພະຍາຍາມເດົາວ່າໄຟລ໌ຄໍາແນະນໍາໃດຕ້ອງການໂດຍ
ການຄິດໄລ່ຊື່ມາດຕະຖານໂດຍອີງໃສ່ຊື່ OS ຂອງລະບົບ, ຊື່ kernel, ການປ່ອຍ
ຈໍານວນ, ແລະອື່ນໆ ... ເນື່ອງຈາກຂໍ້ມູນນີ້ອາດຈະມີການປ່ຽນແປງຢ່າງໄວວາ, ຂ້າພະເຈົ້າບໍ່ໄດ້ບັນທຶກມັນ
ທີ່ນີ້. ທ່ານຈໍາເປັນຕ້ອງ reverse engineer ລະຫັດຈາກ Oldconfig.U.
ເມື່ອທ່ານປ່ອຍຊຸດຂອງທ່ານຄັ້ງທໍາອິດ, ລາຍຊື່ໄຟລ໌ຄໍາແນະນໍາຂອງທ່ານຄວນຈະຫວ່າງເປົ່າ. ຖ້າ
ຜູ້ໃຊ້ຊຸດຂອງທ່ານຈົ່ມວ່າພວກເຂົາມີບັນຫາກັບ ກໍາຫນົດຄ່າ ຄ່າເລີ່ມຕົ້ນໃນ a
ລະບົບໂດຍສະເພາະ, ທ່ານຕ້ອງເບິ່ງວ່ານີ້ແມ່ນບັນຫາສະເພາະເວທີຫຼື a
ທົ່ວໄປ. ໃນກໍລະນີທີ່ຜ່ານມາ, ມັນເປັນເວລາທີ່ຈະແນະນໍາໄຟລ໌ຄໍາແນະນໍາໃຫມ່, ໃນຂະນະທີ່ຢູ່ໃນ
ສຸດທ້າຍ, ຫນ່ວຍງານທີ່ສອດຄ້ອງກັນຄວນໄດ້ຮັບການປັບປຸງ.
ສໍາລັບຕົວຢ່າງ, ລະບົບ SGI ແມ່ນເປັນທີ່ຮູ້ຈັກທີ່ຈະແຕກຫັກ vfork() ການໂທລະບົບ, ໃນເວລານີ້
ການຂຽນ. ແລະຊື່ໄຟລ໌ hint ທີ່ສອດຄ້ອງກັນແມ່ນ sgi.sh. ດັ່ງນັ້ນທັງຫມົດທີ່ທ່ານຕ້ອງການຈະເຮັດແມ່ນການສ້າງ
a hints/sgi.sh ໄຟລ໌ທີ່ທ່ານຂຽນ:
d_vfork="$define"
ເຊິ່ງຈະ remap ສະເຫມີ vfork on fork (ເບິ່ງ d_vfork.U). ໃນເວລາທີ່ແລ່ນຢູ່ໃນລະບົບ SGI ສໍາລັບ
ຄັ້ງທໍາອິດ, ກໍາຫນົດຄ່າ ຈະກວດພົບວ່າມີ hints/sgi.sh ໄຟລ໌, ແລະວ່າພວກເຮົາຢູ່ໃນ
ເຄື່ອງ IRIX (ຊື່ kernel ມັກຈະ / irix), ດັ່ງນັ້ນມັນຈະສະເຫນີ sgi ເປັນຫນຶ່ງ
ຄໍາແນະນໍາທີ່ເປັນໄປໄດ້. ຖ້າຜູ້ໃຊ້ຍອມຮັບມັນ, ແລະນັບຕັ້ງແຕ່ $d_vfork ມູນຄ່າແມ່ນການແກ້ໄຂໂດຍຜ່ານການ
$setvar ໂທ, ກ ວ້າວ! ຈະຖືກປ່ອຍອອກມາເພື່ອເຕືອນວ່າພວກເຮົາກໍາລັງຈະ override ມູນຄ່າ
ຄິດໄລ່ໂດຍ ກໍາຫນົດຄ່າ.
ໃຫ້ສັງເກດວ່າທ່ານບໍ່ຈໍາເປັນຕ້ອງສະຫນອງ ທັງຫມົດ ຄໍາແນະນໍາທີ່ຮູ້ຈັກໂດຍ Oldconfig.U. ຖ້າໄຟລ໌ຄໍາແນະນໍາແມ່ນ
ຂາດ, ມັນຈະບໍ່ຖືກສະເຫນີເປັນທາງເລືອກທີ່ເປັນໄປໄດ້. ການທົດສອບ heuristic ແລ່ນເພື່ອຄິດໄລ່
ຜູ້ສະ ໝັກ ແນະ ນຳ ທີ່ເປັນໄປໄດ້ແມ່ນຂີ້ຕົວະ. ຖ້າທ່ານມີຄ່າໃຫມ່ຫຼືການທົດສອບທີ່ແຕກຕ່າງກັນ, ກະລຸນາ
ສົ່ງພວກເຂົາໄປຫາຂ້ອຍ ...
ຂ້າມ ທາງເລືອກ
ຖ້າເຈົ້າສ້າງ ກ config.over ໄຟລ໌ຢູ່ໃນໄດເລກະທໍລີລະດັບສູງສຸດ, ກໍາຫນົດຄ່າ ຈະຖາມເຈົ້າວ່າເຈົ້າ
ຕ້ອງການໂຫຼດມັນເພື່ອ override ຄ່າເລີ່ມຕົ້ນ. ນີ້ ແມ່ນ ເຮັດ ໄດ້ ກ່ອນ ການ ສ້າງ ຂອງ
config.sh ໄຟລ໌, ສະນັ້ນມັນເຮັດໃຫ້ທ່ານມີໂອກາດທີ່ຈະແກ້ໄຂຄ່າທີ່ເກັບໄວ້ໃນນັ້ນ.
ນີ້ແມ່ນແຕກຕ່າງຈາກວິທີການຄໍາແນະນໍາທີ່ມັນເປັນໄຟລ໌ທ້ອງຖິ່ນ, ທີ່ຜູ້ໃຊ້ແມ່ນ
ບໍ່ເສຍຄ່າເພື່ອສ້າງສໍາລັບການນໍາໃຊ້ຂອງຕົນເອງ. ທ່ານບໍ່ຄວນສະຫນອງໄຟລ໌ດັ່ງກ່າວຕົວທ່ານເອງ, ແຕ່ໃຫ້
ຜູ້ໃຊ້ຮູ້ກ່ຽວກັບຄວາມເປັນໄປໄດ້ນີ້.
ກໍາຫນົດຄ່າ ທາງເລືອກໃນການ
ໄດ້ ກໍາຫນົດຄ່າ script ອາດຈະຖືກເອີ້ນດ້ວຍຕົວເລືອກບາງຢ່າງທີ່ລະບຸໄວ້ໃນເສັ້ນຄໍາສັ່ງ, to
ປັບປ່ຽນພຶດຕິກຳຂອງມັນເລັກນ້ອຍ. ນີ້ແມ່ນທາງເລືອກທີ່ອະນຸຍາດ:
-d ໃຊ້ຄ່າເລີ່ມຕົ້ນສຳລັບຄຳຕອບທັງໝົດ.
-e ໄປສຸດໂດຍບໍ່ມີການຄໍາຖາມທີ່ຜ່ານມາການຜະລິດຂອງ config.sh.
-f ເອກະສານ ໃຊ້ໄຟລ໌ທີ່ລະບຸໄວ້ເປັນການຕັ້ງຄ່າເລີ່ມຕົ້ນ. ຖ້າສະວິດນີ້ບໍ່ໄດ້ໃຊ້,
ການຕັ້ງຄ່າແມ່ນເອົາມາຈາກ config.sh, ເມື່ອປະຈຸບັນ.
-h ພິມຂໍ້ຄວາມຊ່ວຍເຫຼືອ ແລະອອກ.
-r ໃຊ້ຄືນຄ່າສັນຍາລັກ C ຖ້າເປັນໄປໄດ້. ນີ້ຈະຂ້າມຄ່າໃຊ້ຈ່າຍ nm ສັນຍາລັກ
ການສະກັດເອົາ. ຖ້າໃຊ້ຄັ້ງທໍາອິດ (ບໍ່ມີໄຟລ໌ການຕັ້ງຄ່າກ່ອນຫນ້ານີ້),
ກໍາຫນົດຄ່າ ຈະພະຍາຍາມລວບລວມແລະເຊື່ອມຕໍ່ໂຄງການຂະຫນາດນ້ອຍເພື່ອໃຫ້ຮູ້ກ່ຽວກັບ
ການປະກົດຕົວຂອງສັນຍາລັກ, ຫຼືການຂາດຂອງມັນ.
-s ໂໝດງຽບ. ມີແຕ່ສະຕຣິງທີ່ພິມໃນຕົວອະທິບາຍໄຟລ໌ #4 ເທົ່ານັ້ນທີ່ຈະເຫັນຢູ່ໃນ
ຫນ້າຈໍ (ນັ້ນແມ່ນຂໍ້ຄວາມທີ່ສໍາຄັນ). ມັນເປັນໄປບໍ່ໄດ້ທີ່ຈະປິດຢ່າງສົມບູນ
ຜົນຜະລິດໃດໆ, ແຕ່ທ່ານອາດຈະໃຊ້ 'ກໍາຫນົດຄ່າ -ders > / dev / null 2> & 1' ເພື່ອໃຫ້ມີຢ່າງເຕັມທີ່
batch run ໂດຍບໍ່ມີການ output ແລະບໍ່ຈໍາເປັນຕ້ອງມີການໂຕ້ຕອບຜູ້ໃຊ້.
-D symbol=value
ກຳນົດລ່ວງໜ້າ ສັນຍາລັກ ເພື່ອຮັບຜິດຊອບທີ່ກໍານົດໄວ້ ມູນຄ່າ. ມັນເປັນໄປໄດ້ທີ່ຈະໃຊ້ '-D
ສັນຍາລັກ' ເຊິ່ງຈະໃຊ້ຄ່າເລີ່ມຕົ້ນຂອງ 'define'.
-E ຢຸດໃນຕອນທ້າຍຂອງຄໍາຖາມການຕັ້ງຄ່າ, ຫຼັງຈາກການຜະລິດ a
config.sh. ນີ້ຈະບໍ່ປະຕິບັດໃດໆ 'ເຮັດໃຫ້ ຂຶ້ນກັບ' ຫຼືການສະກັດໄຟລ໌ .SH.
-K ຜູ້ໃຊ້ທີ່ມີຄວາມຮູ້. ເມື່ອທ່ານໃຊ້ຕົວເລືອກນີ້, ທ່ານຮູ້ວ່າທ່ານກໍາລັງເຮັດຫຍັງແລະ
ເພາະສະນັ້ນຈຶ່ງໄດ້ config.sh ໄຟລ໌ຈະຖືກຈັດການສະເໝີຄືກັບວ່າມັນຖືກຕັ້ງໄວ້
ຖືກນໍາໃຊ້ຄືນໃຫມ່, ເຖິງແມ່ນວ່າມັນອາດຈະຖືກສ້າງຂື້ນໃນລະບົບມະນຸດຕ່າງດາວ. ມັນຍັງ
ປ້ອງກັນການເອົາລູກອອກເມື່ອ ກໍາຫນົດຄ່າ ກວດພົບຕົວສັງລວມ C ທີ່ບໍ່ສາມາດໃຊ້ໄດ້ ຫຼືຊຸດທີ່ຜິດພາດ
ຂອງທຸງ C. ທາງລັດເພີ່ມເຕີມອາດຈະຖືກເປີດໃຊ້ໂດຍຕົວເລືອກນີ້ເຊັ່ນດຽວກັນໃນ
ອະນາຄົດ. ທາງເລືອກນີ້ແມ່ນບັນທຶກໄວ້ໃນ ກໍາຫນົດຄ່າ ຂໍ້ຄວາມການນໍາໃຊ້, ເພື່ອເຕືອນພວກເຮົາ
ກ່ຽວກັບການມີຢູ່ຂອງມັນ, ແຕ່ຄໍາອະທິບາຍທີ່ໃຫ້ໄວ້ແມ່ນຫວັງວ່າຈະເປັນລະຫັດລັບພຽງພໍ.
:-)
-O ອະນຸຍາດຄ່າທີ່ລະບຸຜ່ານ a -D or -U ເພື່ອລົບລ້າງການຕັ້ງຄ່າຈາກການໂຫຼດໃດໆ
ໄຟລ໌ການຕັ້ງຄ່າ. ນີ້ບໍ່ແມ່ນພຶດຕິກຳເລີ່ມຕົ້ນເນື່ອງຈາກການ overriding ຈະ
ບໍ່ໄດ້ຖືກຂະຫຍາຍພັນໄປຫາຕົວແປທີ່ມາຈາກສິ່ງທີ່ທ່ານກໍາລັງປ່ຽນແປງໃນປັດຈຸບັນ.
ຕາມທໍາມະຊາດ, ໂດຍບໍ່ມີການ -O, ການຕັ້ງຄ່າແມ່ນເຮັດໄດ້ພຽງແຕ່ເມື່ອບໍ່ມີໄຟລ໌ການຕັ້ງຄ່າ
loaded, ເຊິ່ງປອດໄພເນື່ອງຈາກຕົວແປທີ່ມາຈາກບໍ່ໄດ້ຄິດໄລ່ເທື່ອ ...
-S ປະຕິບັດການປ່ຽນແທນຕົວແປໃນໄຟລ໌ .SH ທັງໝົດ. ທ່ານສາມາດສົມທົບມັນກັບ
-f ສະຫຼັບເພື່ອເຜີຍແຜ່ການຕັ້ງຄ່າໃດກໍໄດ້ທີ່ທ່ານຕ້ອງການ.
-U ສັນຍາລັກ =
ຊຸດກ່ອນ ສັນຍາລັກ ຮັບຜິດຊອບຄ່າຫວ່າງເປົ່າ. ມັນເປັນໄປໄດ້ທີ່ຈະໃຊ້ '-U ສັນຍາລັກ'
ເຊິ່ງຈະກໍານົດ ສັນຍາລັກ ກັບ 'undef'.
-V ພິມຈໍານວນສະບັບຂອງ metaconfig ທີ່ສ້າງນີ້ ກໍາຫນົດຄ່າ script
ແລະອອກຈາກການ.
ເຮັດວຽກ ສະພາບແວດລ້ອມ
ເມື່ອເລີ່ມຕົ້ນ, ກໍາຫນົດຄ່າ ສ້າງທ້ອງຖິ່ນ UU ໄດເລກະທໍລີແລະແລ່ນຈາກບ່ອນນັ້ນ. ໄດເລກະທໍລີ
ຖືກເອົາອອກເມື່ອ Configure ສິ້ນສຸດລົງ, ແຕ່ນີ້ຫມາຍຄວາມວ່າທ່ານຕ້ອງແລ່ນສະຄິບຈາກບ່ອນໃດນຶ່ງ
ທ່ານສາມາດຂຽນ, ie ບໍ່ແມ່ນມາຈາກລະບົບໄຟລ໌ທີ່ອ່ານເທົ່ານັ້ນ.
ທ່ານສາມາດແລ່ນໄດ້ ກໍາຫນົດຄ່າ ຢ່າງໃດກໍຕາມ, ຫ່າງໄກສອກຫຼີກ, ເຊັ່ນດຽວກັບ:
../package/Configure
ເພື່ອກໍານົດແຫຼ່ງທີ່ບໍ່ມີຢູ່ໃນທ້ອງຖິ່ນ. ໄຟລ໌ທັງຫມົດທີ່ສ້າງຂຶ້ນຈະຖືກໃສ່ໃນ
ໄດເລກະທໍລີທີ່ທ່ານກໍາລັງແລ່ນສະຄິບຈາກ. magic ນີ້ແມ່ນເຮັດໄດ້ຂໍຂອບໃຈກັບ src.U
ຫນ່ວຍບໍລິການ, ເຊິ່ງແມ່ນການຕັ້ງຄ່າ $src ແລະ $rsrc ຕົວແປເພື່ອຊີ້ໄປຫາແຫຼ່ງແພັກເກັດ. ນັ້ນ
ເສັ້ນທາງແມ່ນເຕັມຫຼືພີ່ນ້ອງ, ຂຶ້ນກັບວ່າ ກໍາຫນົດຄ່າ ໄດ້ invoked ຜ່ານ ເຕັມ ຫຼື
ເສັ້ນທາງພີ່ນ້ອງ.
ຈາກພາຍໃນ UU subdirectory, ທ່ານສາມາດນໍາໃຊ້ $rsrc ເພື່ອເຂົ້າເຖິງໄຟລ໌ຕົ້ນສະບັບ (ຫນ່ວຍງານ
ໂດຍອ້າງອີງໃສ່ໄຟລ໌ແຫຼ່ງເຊື່ອມຕໍ່ hints ສະເຫມີຈະຕ້ອງໃຊ້ກົນໄກນີ້ແລະບໍ່ສົມມຸດວ່າ
ໄຟລ໌ມີຢູ່ໃນໄດເລກະທໍລີຫຼັກ). Makefiles ທັງໝົດຄວນໃຊ້ຕົວແປ $src
ເປັນຕົວຊີ້ໄປຫາແຫຼ່ງຂໍ້ມູນຈາກດ້ານເທິງຂອງໄດເລກະທໍລີກໍ່ສ້າງ (ບ່ອນທີ່ ກໍາຫນົດຄ່າ ແລ່ນ),
ໂດຍກົງ ຫຼືຜ່ານການຕັ້ງຄ່າ VPATH.
ໃນເວລາແລ່ນ ກໍາຫນົດຄ່າ ຫ່າງໄກສອກຫຼີກ, ໄຟລ໌ .SH ຖືກສະກັດຢູ່ໃນໄດເລກະທໍລີສ້າງ, ບໍ່ແມ່ນ
ຢູ່ໃນຕົ້ນໄມ້ແຫຼ່ງ. ຢ່າງໃດກໍຕາມ, ມັນຮຽກຮ້ອງໃຫ້ມີບາງປະເພດຂອງ a ເຮັດໃຫ້ ສະຫນັບສະຫນູນເພື່ອໃຫ້ສາມາດລວບລວມ
ສິ່ງທີ່ຢູ່ໃນໄດເລກະທໍລີກໍ່ສ້າງໃນຂະນະທີ່ແຫຼ່ງແມ່ນຢູ່ບ່ອນອື່ນ.
ການນໍາໃຊ້ Magic ນິຍາມໃໝ່
ໂດຍການນໍາໃຊ້ຂອງ -M ສະຫຼັບ, ບາງ remappings magic ອາດຈະເກີດຂຶ້ນພາຍໃນ a confmagic.h
ໄຟລ໌. ໄຟລ໌ທີ່ຈໍາເປັນຕ້ອງໄດ້ຮັບການລວມຫຼັງຈາກ config.h, ແນ່ນອນ, ແຕ່ຍັງຫຼັງຈາກທັງຫມົດ
ທີ່ຈໍາເປັນອື່ນໆປະກອບມີໄຟລ໌. ຄື:
#ລວມທັງ "config.h"
...
... ອື່ນໆ ລວມ ...
...
#ລວມທັງ "confmagic.h"
ໂດຍປົກກະຕິແລ້ວ, confmagic.h ຈະພະຍາຍາມ remap bcopy() on memcpy() ຖ້າບໍ່ມີ bcopy() is
ມີຢູ່ໃນທ້ອງຖິ່ນ, ຫຼືຫັນປ່ຽນ vfork ເຂົ້າໄປໃນ fork ໃນເວລາທີ່ຈໍາເປັນ, ສະນັ້ນເຮັດໃຫ້ມັນບໍ່ມີປະໂຫຍດ
bother ກ່ຽວກັບ HAS_VFORK ສັນຍາລັກ.
magic ການຕັ້ງຄ່ານີ້ແມ່ນບັນທຶກໄວ້ໃນໄຟລ໌ຄໍາສັບ.
ຫນ່ວຍບໍລິການ ແມ່ແບບ
ມີຊຸດຂອງແມ່ແບບຫນ່ວຍງານຢູ່ໃນ metaconfig ໄດເລກະທໍລີແຫຼ່ງ, ເຊິ່ງມີຈຸດປະສົງເພື່ອ
ຖືກນໍາໃຊ້ໂດຍໂຄງການ (ຍັງບໍ່ໄດ້ຂຽນ) ເພື່ອຜະລິດຫົວຫນ່ວຍໃຫມ່ຢ່າງໄວວາສໍາລັບປະເພດຕ່າງໆ
ສະຖານະການ. ບໍ່ມີເອກະສານສໍາລັບໂຄງການທີ່ຍັງບໍ່ໄດ້ສໍາເລັດນີ້, ແຕ່ຂ້າພະເຈົ້າຄິດວ່າຂ້າພະເຈົ້າຈະກ່າວເຖິງມັນ
ໃນຫນ້າຄູ່ມືໃນກໍລະນີທີ່ທ່ານຕ້ອງການທີ່ຈະເຮັດມັນຕົວທ່ານເອງແລະຫຼັງຈາກນັ້ນປະກອບສ່ວນມັນ ...
AUTHORS
Larry Wall[email protected]> ສໍາລັບລຸ້ນ 2.0.
Harlan Stenn[email protected]> ສໍາລັບການຂະຫຍາຍຫນ່ວຍງານທີ່ສໍາຄັນ.
Raphael Manfredi[email protected]>.
ຜູ້ປະກອບສ່ວນອື່ນໆຈໍານວນຫຼາຍສໍາລັບການ metaconfig ໜ່ວຍ. ເບິ່ງໄຟລ໌ສິນເຊື່ອສໍາລັບບັນຊີລາຍຊື່.
ໃຊ້ metaconfig ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net