ນີ້ແມ່ນຄໍາສັ່ງ makepp_incompatibilities ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
makepp_incompatibilities -- ຄວາມບໍ່ເຂົ້າກັນລະຫວ່າງ makepp ແລະ GNU make
ລາຍລະອຽດ
Makepp ໄດ້ຖືກອອກແບບໃຫ້ໃກ້ຊິດເທົ່າທີ່ເປັນໄປໄດ້ກັບ GNU ເຮັດ
(<http://www.gnu.org/software/make/manual/make.html>). GNU autotools
(<http://www.gnu.org/software/automake/manual/automake.html>), CMake
(<http://www.cmake.org/>), premake (http://industriousone.com/premake> ແລະເບິ່ງຂໍ້ສັງເກດ
ຂ້າງລຸ່ມນີ້) ຫຼືລະບົບການສ້າງມໍລະດົກທີ່ເຮັດດ້ວຍມືຄວນຈະສາມາດສ້າງໄດ້ດ້ວຍ makepp. ອັນນີ້
ເຈົ້າສາມາດຍ້າຍໂຄງການໄດ້ຢ່າງບໍ່ຫຍຸ້ງຍາກ. ຫຼືຖ້າຫາກວ່າທ່ານບໍ່ຕ້ອງການທີ່ຈະມີຄວາມສຸກທັງຫມົດຂອງ
ປະໂຫຍດຂອງ makepp (ຕົວຢ່າງດັ່ງນັ້ນຄົນອື່ນຍັງສາມາດສ້າງໂຄງການຂອງທ່ານກັບ GNU make) ໃນຂະນະທີ່ທ່ານ
ຜົນກໍາໄລຈາກປະໂຫຍດຄວາມຫນ້າເຊື່ອຖືສໍາລັບການພັດທະນາຂອງທ່ານ.
ຢ່າງໃດກໍຕາມ, ເນື່ອງຈາກວ່າຄວາມແຕກຕ່າງຂອງປັດຊະຍາ, ບາງ GNU make's ຫຼື POSIX make's
(<http://pubs.opengroup.org/onlinepubs/009695399/utilities/make.html>) ຄຸນສົມບັດບໍ່ສາມາດເປັນ
ສະຫນັບສະຫນູນ. ຈໍານວນຫນ້ອຍທີ່ບໍ່ໄດ້ຮັບການປະຕິບັດເພາະວ່າພວກເຮົາບໍ່ມີເວລາ. ສ່ວນໃຫຍ່ຂອງ
ຄວາມແຕກຕ່າງຈາກ GNU ເຮັດແມ່ນຂ້ອນຂ້າງດ້ານວິຊາການແລະພຽງແຕ່ບໍ່ຄ່ອຍຈະເຮັດໃຫ້ເກີດບັນຫາ. ອະນິຈາ
ການແກ້ໄຂບັນຫາການຜະລິດແບບດັ້ງເດີມ ແມ່ນມີຄວາມສັບສົນຫຼາຍຂຶ້ນ,
ແລະກໍາລັງໃຫ້ makepp ມີຄວາມຫຍຸ້ງຍາກ.
ໂດຍຫຍໍ້, ຖ້າມັນບໍ່ໄດ້ສ້າງອອກຈາກກ່ອງ, ພະຍາຍາມ:
makepp --no-warn makepp_simple_concatenation=1 makepp_percent_subdirs=1 \
--build-check=target_newer --last-chace-rules --no-remake-makefiles
ຖ້າສິ່ງນັ້ນປະສົບຜົນ ສຳ ເລັດ, ເຈົ້າສາມາດພະຍາຍາມລົບລ້າງການໂຕ້ຖຽງເຫຼົ່ານັ້ນເທື່ອລະອັນ. ແຕ່ຖ້າມັນລົ້ມເຫລວ,
ລອງເພີ່ມ:
--traditional-recursive-make
ຖ້າມັນລົ້ມເຫລວ, ລະບົບການກໍ່ສ້າງຕ້ອງການ tweaking ບາງຢ່າງເພື່ອຮ່ວມມືກັບ makepp. ເຖິງແມ່ນວ່າ
ຖ້າບາງທາງເລືອກທີ່ອະທິບາຍຢູ່ທີ່ນີ້ເຮັດໃຫ້ບາງສິ່ງບາງຢ່າງສາມາດສ້າງໄດ້, ມັນຍັງແນະນໍາໃຫ້ປັບຕົວ
ສິ່ງເລັກນ້ອຍ, ດັ່ງນັ້ນພວກມັນເຂົ້າກັນໄດ້ອອກຈາກກ່ອງທີ່ມີທັງສອງເຮັດໃຫ້.
Forcing ເພີ່ມເຕີມ POSIX or GNU ເຮັດໃຫ້ ເຂົ້າກັນໄດ້
ນີ້ແມ່ນຄວາມເປັນໄປໄດ້ຂອງສາຍຄໍາສັ່ງບາງຢ່າງສໍາລັບການໄດ້ຮັບລະບົບການກໍ່ສ້າງມໍລະດົກຫຼາຍອັນເພື່ອເຮັດວຽກ
ໂດຍບໍ່ມີການດັດແປງ. ພວກເຂົາເຮັດໃຫ້ makepp ເຮັດຕາມພຶດຕິກໍາຂອງ GNU ຢ່າງຖືກຕ້ອງ.
ເຂົ້າກັນໄດ້ ຜ່ານ ໄດ້ ຕົວເລືອກ: "--build-check=ເປົ້າໝາຍ_ໃໝ່ກວ່າ"
ໂດຍຄ່າເລີ່ມຕົ້ນ, makepp ຈະພະຍາຍາມສ້າງຄືນໃຫມ່ເປົ້າຫມາຍທັງຫມົດຖ້າມີການເພິ່ງພາອາໄສໃດໆ
ມີການປ່ຽນແປງນັບຕັ້ງແຕ່ການກໍ່ສ້າງທີ່ຜ່ານມາ, ຫຼືຖ້າຄໍາສັ່ງມີການປ່ຽນແປງ (ເບິ່ງ makepp_build_check ສໍາລັບ
ລາຍລະອຽດ). ປົກກະຕິນີ້ແມ່ນສິ່ງທີ່ທ່ານຕ້ອງການ. ບາງຄັ້ງ, ຢ່າງໃດກໍຕາມ, ທ່ານບໍ່ຕ້ອງການເປົ້າຫມາຍ
ທີ່ຈະສ້າງໃຫມ່ຖ້າມັນຖືກດັດແປງນອກເຫນືອຈາກການຄວບຄຸມຂອງ makepp (ຕົວຢ່າງ, ໂດຍການດັດແກ້
ມັນ, ຫຼືໂດຍການແລ່ນໂຄງການດ້ວຍຕົນເອງເພື່ອເຮັດໃຫ້ໄຟລ໌). ທ່ານສາມາດບັງຄັບ makepp ໃຊ້
ສູດການຄິດໄລ່ແບບດັ້ງເດີມ, ເຊິ່ງພຽງແຕ່ສ້າງຄືນໃຫມ່ຖ້າເປົ້າຫມາຍໃດໆທີ່ໃຫມ່ກວ່າ
dependencies, ໂດຍການເພີ່ມທາງເລືອກນີ້ໃສ່ເສັ້ນຄໍາສັ່ງ.
ເຂົ້າກັນໄດ້ ຜ່ານ ໄດ້ ຕົວເລືອກ: "--dont-build=config.status"
ມີແພັກເກັດທີ່ພະຍາຍາມຕັ້ງຄ່າອັດຕະໂນມັດດ້ວຍຕົນເອງ, ຫຼືເຮັດສິ່ງອື່ນໆ, ເຊິ່ງ gmake
ບໍ່ສົນໃຈເວັ້ນເສຍແຕ່ຈະຖືກຖາມ, ເຊັ່ນ:
config.status : configure
./config.status --recheck
configure : configure.in aclocal.m4
autoconf
ຄົນສ່ວນໃຫຍ່ບໍ່ມີ "autoconf" ຕິດຕັ້ງ, ສະນັ້ນມີສະຕິເຮັດທຸກຢ່າງໂດຍ
ກົດລະບຽບ, ດັ່ງທີ່ makepp ເຮັດ, ຈະລົ້ມເຫລວ. ທາງເລືອກນີ້ປ້ອງກັນວ່າ, ຖ້າຫາກວ່າທ່ານຄິດອອກຫຍັງ
ບໍ່ແມ່ນການກໍ່ສ້າງ.
ເຂົ້າກັນໄດ້ ຜ່ານ ໄດ້ ຕົວເລືອກ: "-- ໂອກາດສຸດທ້າຍ"
ກົດລະບຽບເລີ່ມຕົ້ນ (ກົດລະບຽບຮູບແບບທີ່ບໍ່ມີການຂຶ້ນກັບຮູບແບບ) ແມ່ນບໍ່ສະຫນັບສະຫນູນຕາມປົກກະຕິ.
Makepp instantiates ກົດລະບຽບທັງຫມົດໂດຍອີງໃສ່ໄຟລ໌ທີ່ມີຢູ່ແລ້ວ, ສະນັ້ນມັນເປັນການຮູ້ຈັກທຸກ
ໄຟລ໌ທີ່ສາມາດໄດ້ຮັບການສ້າງຂຶ້ນ. ອະນິຈາດ້ວຍວິທີນີ້ມັນບໍ່ຮູ້ວິທີທີ່ຈະສ້າງຮູບແບບທັນທີ
ກົດລະບຽບທີ່ບໍ່ມີການຂຶ້ນກັບຮູບແບບ. ກົນໄກ :last_chance ແກ້ໄຂບາງສ່ວນໄດ້.
ບ່ອນທີ່ມັນດີພໍສໍາລັບ makefiles ແບບເກົ່າ, ທາງເລືອກນີ້ອະນຸຍາດໃຫ້ເປີດມັນທົ່ວໂລກ.
ເຂົ້າກັນໄດ້ ຜ່ານ ໄດ້ ຕົວເລືອກ: "-- ບໍ່ໄດ້ເຕືອນ"
ອັນນີ້ບໍ່ໄດ້ປັບປຸງຜົນໄດ້ຮັບ. Makepp ຈະໃຫ້ຂໍ້ຄວາມເຕືອນສໍາລັບສິ່ງຫຼາຍຢ່າງ
ເຊິ່ງ Unix ແບບດັ້ງເດີມຍອມຮັບໄດ້ໂດຍບໍ່ມີການສັ່ນສະເທືອນ. ນີ້ແມ່ນຍ້ອນວ່າມີ
ວິທີທີ່ດີກວ່າທີ່ຈະເຮັດໃຫ້ເຂົາເຈົ້າກັບ makepp. ຖ້າຄໍາເຕືອນເຫຼົ່ານີ້ລົບກວນທ່ານ, ທ່ານສາມາດປິດພວກມັນໄດ້
ດ້ວຍຕົວເລືອກນີ້.
ເຂົ້າກັນໄດ້ ຜ່ານ ໄດ້ ຕົວເລືອກ: "--hybrid-recursive-make"
ການຮຽກຮ້ອງຄືນໃໝ່ຂອງການເຮັດແມ່ນມັກຈະຖືວ່າເປັນການປະຕິບັດທີ່ບໍ່ປອດໄພ (ເບິ່ງ "ດີກວ່າ
ລະບົບສໍາລັບການສ້າງລໍາດັບຊັ້ນ" ໃນ makepp ສໍາລັບລາຍລະອຽດ), ແຕ່ວ່າພວກເຂົາເຈົ້າແມ່ນທົ່ວໄປທີ່ສຸດໃນ
makefiles ທີ່ມີຢູ່ແລ້ວ. Makepp ສະຫນັບສະຫນູນ recursive make ສໍາລັບການເຂົ້າກັນໄດ້ກັບຄືນໄປບ່ອນ; ສໍາລັບໃຫມ່
makefiles, ມັນດີກວ່າທີ່ຈະໃຊ້ຄໍາຖະແຫຼງການ "load_makefile", ຫຼື implicit ຂອງ makepp.
ກົນໄກການໂຫຼດ makefile.
ໃນຄໍາສັ່ງທີ່ຈະສາມາດນໍາໃຊ້ repositories ສໍາລັບ variant builds, ແລະເພື່ອຊ່ວຍໃຫ້ recursive
ການຮຽກຮ້ອງເຮັດໃຫ້ປອດໄພກວ່າ, ປົກກະຕິແລ້ວ makepp ບໍ່ໄດ້ຮຽກຮ້ອງຕົວມັນເອງແບບ recursively
ເຖິງແມ່ນວ່າທ່ານຈະບອກມັນ. ແທນທີ່ຈະ, ຂະບວນການຍ່ອຍຕິດຕໍ່ສື່ສານກັບຂະບວນການພໍ່ແມ່, ແລະ
ການກໍ່ສ້າງຕົວຈິງແມ່ນເຮັດໂດຍຂະບວນການພໍ່ແມ່.
ນີ້ເຮັດວຽກໃນກໍລະນີຫຼາຍທີ່ສຸດ, ແຕ່ທ່ານອາດຈະບໍ່ໄດ້ຮຽກຮ້ອງ makefiles ຫຼາຍອັນດຽວກັນ
ໄດເລກະທໍລີ, ຕົວຢ່າງ, ຕໍ່ໄປນີ້ຈະບໍ່ເຮັດວຽກ:
ເປົ້າໝາຍ: ການເພິ່ງພາອາໄສ
$(MAKE) -f other_makefile ເປົ້າໝາຍ
ໃນກໍລະນີນີ້ makepp ສັງເກດເຫັນວ່າມັນກໍາລັງໂຫລດ makefile ທີສອງແລະຈົ່ມ. ດ້ວຍທາງເລືອກນີ້
ແທນທີ່ຈະ, ມັນຈະກັບຄືນໄປບ່ອນວິທີການພື້ນເມືອງຂອງການກໍ່ສ້າງຈາກ makefiles ເພີ່ມເຕີມໃນ
ຂະບວນການ makepp ແຍກຕ່າງຫາກແຕ່ລະຄົນ.
ຫມາຍເຫດ: ການໂຫຼດທາງດ້ານວິຊາການຫຼາຍ makefiles ຈະບໍ່ມີບັນຫາ, ແຕ່ໂດຍປົກກະຕິພວກເຂົາເຈົ້າມີ
ຊື່ເປົ້າຫມາຍ phony ດຽວກັນ. ການຮັກສາໄວ້ຫ່າງກັນຈະຫມາຍເຖິງການອອກແບບໃຫມ່ຢ່າງສົມບູນຂອງ makepp
ພາຍໃນ. ຢ່າງໃດກໍຕາມ, ນີ້ຈະເຮັດວຽກ, ແຕ່ມັນບໍ່ທຽບເທົ່າ:
ເປົ້າໝາຍ: ການເພິ່ງພາອາໄສ
cd subdir && $(MAKE) -f other_makefile ເປົ້າໝາຍ
ເຂົ້າກັນໄດ້ ຜ່ານ ໄດ້ ຕົວເລືອກ: "--ແບບດັ້ງເດີມ-ເຮັດຊ້ຳ-ເຮັດ"
ບາງຄັ້ງທາງເລືອກທີ່ຜ່ານມາແມ່ນບໍ່ພຽງພໍ, ໂດຍສະເພາະຖ້າຫາກວ່າ invocations recursive ໃຊ້
ທາງເລືອກທີ່ກົງກັນຂ້າມ. Makepp ໃຊ້ພຽງແຕ່ຫນຶ່ງຊຸດຂອງທາງເລືອກທົ່ວໂລກ, ດັ່ງນັ້ນ submake ບໍ່ແມ່ນ
ອະນຸຍາດໃຫ້ປັບປຸງແກ້ໄຂໃຫ້ເຂົາເຈົ້າ, ຍ້ອນວ່າມັນຍັງຈະກ່ຽວຂ້ອງກັບ makefiles ອື່ນໆ.
ການເພີ່ມທາງເລືອກນີ້ໃສ່ເສັ້ນຄໍາສັ່ງ, ມີຜົນຂ້າງຄຽງທີ່ບໍ່ຕ້ອງການຕໍ່ໄປນີ້:
· Recursive ເຮັດໃຫ້ບໍ່ດໍາເນີນການພາຍໃນຂະຫນານ, ເຖິງແມ່ນວ່າພໍ່ແມ່ເຮັດ.
ບໍ່ເຫມືອນກັບ gmake ບໍ່ມີການປະສານງານໂດຍລວມຂອງຈໍານວນຂະບວນການ. ນີ້ຈະ
ບໍ່ໄດ້ຮັບການປະຕິບັດເພາະວ່າວິທີການເຮັດວຽກນີ້ບໍ່ແມ່ນເປົ້າຫມາຍການອອກແບບຂອງ makepp.
· Recursive make processes ບໍ່ຮູ້ຫຍັງກ່ຽວກັບ repositories.
· ແຕ່ລະຂະບວນການເຮັດ recursive ຜະລິດໄຟລ໌ບັນທຶກຂອງຕົນເອງ, ໃນໄດເລກະທໍລີມັນຖືກເອີ້ນ
ໃນ, ແທນທີ່ຈະຜະລິດໄຟລ໌ບັນທຶກຫນຶ່ງສໍາລັບການກໍ່ສ້າງທັງຫມົດ.
·ເນື່ອງຈາກວ່າ makepp ປົກກະຕິແລ້ວກໍ່ສ້າງຫຼາຍກ່ວາແບບດັ້ງເດີມເຮັດໃຫ້ເຫັນວ່າມີຄວາມຈໍາເປັນ, ແລະນັບຕັ້ງແຕ່ຈໍານວນຫຼາຍ
ການກໍ່ສ້າງລະບົບສະຫນອງການໂທ recursive ໃນທຸກທິດທາງ, ນີ້ອາດຈະນໍາໄປສູ່ການ endless
ການເອີ້ນຄືນ. Makepp ຈະດຶງເບກຫຼັງຈາກ 50 ຮອບແລະບອກທ່ານກ່ຽວກັບວິທີທີ່ຈະເພີ່ມຂຶ້ນ
ວ່າ, ໃນກໍລະນີທີ່ທ່ານກໍ່ມີຮັງເລິກດັ່ງກ່າວ.
ເຖິງແມ່ນວ່າມີທາງເລືອກ "--traditional-recursive-make", ສະພາບແວດລ້ອມປ່ຽນແປງ
"MAKEOVERRIDES" ແລະ "MFLAGS" ບໍ່ໄດ້ຖືກຕັ້ງ, ແລະຖືກລະເລີຍ, ດັ່ງນັ້ນ makefiles ທີ່ຂຶ້ນກັບ
ເຫຼົ່ານັ້ນຈະບໍ່ເຮັດວຽກ.
A premake ຜະລິດ makefile ແມ່ນພຽງແຕ່ເປັນ wrapper ຕະຫລົກກັບ invocation ຍ່ອຍໃນດຽວກັນ
ໄດເລກະທໍລີ. ຖ້າທ່ານມີບາງເປົ້າຫມາຍໂຄງການ X ແລະ Z ມັນຈະມີເສັ້ນຄ້າຍຄື
@${MAKE} --no-print-directory -C . -f XYZ.make
ໃນກໍລະນີນີ້ທ່ານສາມາດຫລີກລ້ຽງທາງເລືອກ "--traditional-recursive-make" ໂດຍການຮຽກຮ້ອງໂດຍກົງ.
makepp ກັບວ່າ "-f XYZ.make" ທາງເລືອກ.
ເຂົ້າກັນໄດ້ ໂດຍບໍ່ມີການ ໄດ້ ຕົວເລືອກ: "--ວຽກ=n"
ບາງຄັ້ງ makefiles ແບບເກົ່າຈະບໍ່ສະແດງລາຍຊື່ການເພິ່ງພາອາໄສທັງຫມົດ, ອີງໃສ່ຄໍາສັ່ງຂອງ
ການປະຕິບັດເພື່ອເຮັດໃຫ້ພວກເຂົາຢູ່ໃນເວລາ. ໃນສະຖານະການນີ້ makepp ອາດຈະຈັດການໂທຫາກົດລະບຽບກ່ອນ
ການເພິ່ງພາອາໄສຂອງມັນໄດ້ຖືກເຮັດທັງໝົດ. ຫຼັງຈາກນັ້ນ, ຜົນໄດ້ຮັບອາດຈະດີກວ່າທີ່ມີຫນ້ອຍ, ຫຼືແມ້ກະທັ້ງບໍ່ມີ
ການປະຕິບັດຂະຫນານ.
ເຂົ້າກັນໄດ້ ຜ່ານ ໄດ້ ຕົວປ່ຽນແປງ: "makepp_simple_concatenation=1"
ການທົດແທນແບບ rc ແມ່ນວິທີເລີ່ມຕົ້ນທີ່ makepp ປະຕິບັດການປ່ຽນຕົວແປເປັນຂໍ້ຄວາມ
strings ເນື່ອງຈາກວ່າມັນບໍ່ຄ່ອຍຈະທໍາລາຍ makefiles ມໍລະດົກແລະມັກຈະເປັນປະໂຫຍດໃນໃຫມ່
makefiles. ຢ່າງໃດກໍຕາມ, ມັນແນະນໍາຄວາມບໍ່ສອດຄ່ອງບາງຄັ້ງໃນການທົດແທນຂອງ
ຕົວແປທີ່ບໍ່ອ້ອມຮອບດ້ວຍຊ່ອງຫວ່າງ. ຍົກຕົວຢ່າງ,
INCLUDE_PREFIX := -I/some/include/dir -I
ລວມມີ := $(INCLUDE_PREFIX)/other/include/dir
ຈະຕັ້ງ "INCLUDES" ເປັນ "-I/some/include/dir/other/include/dir -I/other/include/dir" ຖ້າ rc-
ການປ່ຽນຮູບແບບຖືກເປີດໃຊ້ງານ, ໃນຂະນະທີ່ GNU make ຈະຕັ້ງມັນເປັນ
"-I/some/include/dir -I/other/include/dir". ຕົວຢ່າງ, ເມື່ອລວບລວມ Redis 2.6.5 ມັນພະຍາຍາມ
ແລ່ນ "printfgcc". ດັ່ງກ່າວເປັນ concatenation ຕະຫລົກຂອງສອງຄໍາສັ່ງເປັນຕົວຊີ້ບອກທີ່ເຂັ້ມແຂງວ່າ
ຕົວແປນີ້ແມ່ນຈໍາເປັນເພື່ອຫຼຸດລົງເພື່ອເຮັດໃຫ້ semantics.
ຍັງມີຄວາມບໍ່ເຂົ້າກັນໃນການຈັດການຊ່ອງຫວ່າງໃນຕົວແປ:
null :=
T := -o $(null) # T ປະກອບດ້ວຍ -o ຕິດຕາມດ້ວຍຊ່ອງຫວ່າງຫນຶ່ງ.
OUTFILE = $(T)outfile
ຈະຕັ້ງ "OUTFILE" ເປັນ "-ooutfile" ຖ້າການທົດແທນແບບ rc ຖືກເປີດໃຊ້, ໃນຂະນະທີ່ GNU ເຮັດ.
ຈະຕັ້ງມັນເປັນ "-o outfile".
ທັງສອງຄວາມບໍ່ເຂົ້າກັນໄດ້ຖືກລຶບອອກໂດຍການຕັ້ງຄ່າ "makepp_simple_concatenation"
ຕົວແປ. ໃຫ້ສັງເກດວ່າ, ຢ່າງໃດກໍຕາມ, ເຖິງແມ່ນວ່າມີ "makepp_simple_concatenation", makepp ຍັງ
ປິ່ນປົວຊ່ອງຫວ່າງທີ່ບໍ່ເຂົ້າກັນໄດ້ໃນບາງສະຖານະການ:
T := -o # ຢ່າລຶບຄຳເຫັນນີ້.
GNU ສ້າງຊຸດ "T" ເພື່ອບັນຈຸ "-o" ຕິດຕາມດ້ວຍຊ່ອງ, ໃນຂະນະທີ່ makepp ລອກອອກ
ຊ່ອງທາງຫຼັງຢ່າງໃດກໍຕາມ. ຖ້າທ່ານຕ້ອງການພື້ນທີ່ຕິດຕາມ, ທ່ານຕ້ອງກໍານົດ
"makepp_simple_concatenation" ແລະຍັງຕັ້ງ "T" ໂດຍໃຊ້ເຕັກນິກທີ່ກ່ຽວຂ້ອງກັບ dummy.
ຕົວແປເຊັ່ນ "null", ດັ່ງທີ່ສະແດງຂ້າງເທິງ.
Workaround ທາງເລືອກ "--no-remake-makefiles"
ແຫຼ່ງເປີດປົກກະຕິຕ້ອງການໂທຫາ "configure" ເພື່ອສ້າງ makefiles. ແຕ່ຫຼັງຈາກນັ້ນເຫຼົ່ານີ້
makefiles ສາມາດມີກົດລະບຽບທີ່ຈະ remake makefile, ໂດຍການໂທຫາບາງຄໍາສັ່ງ. Makepp ຈະ
ປະຕິບັດຕາມຢ່າງມີຄວາມສຸກແລະປັບປຸງມັນຕາມກົດລະບຽບ. ແຕ່ບາງຄັ້ງນີ້ເປັນອັນຕະລາຍ, ດັ່ງນັ້ນ
ພຽງແຕ່ຂ້າມມັນ.
ເຂົ້າກັນໄດ້ ຜ່ານ ໄດ້ ຕົວປ່ຽນແປງ: "makepp_percent_subdirs=1"
ໂດຍຄ່າເລີ່ມຕົ້ນ, "%" ໃນກົດລະບຽບຮູບແບບບໍ່ກົງກັບໄດເລກະທໍລີ. ນີ້ຫມາຍຄວາມວ່າກົດລະບຽບເຊັ່ນ
ນີ້:
%.o: %.c
$(CC) $(CFLAGS) -c $(input) -o $(output)
ຈະບໍ່ຖືກນຳໃຊ້ກັບໄຟລ໌ເຊັ່ນ "../shared/xyz.c". ຖ້າທ່ານຕ້ອງການໃຫ້ມັນກົງກັບໄຟລ໌ໃນ
subdirectories ຄືກັນ, ຫຼັງຈາກນັ້ນກໍານົດຕົວແປ "makepp_percent_subdirs=1" ໃນເສັ້ນຄໍາສັ່ງ
ຫຼືຢູ່ໃກ້ກັບຈຸດເລີ່ມຕົ້ນຂອງ makefile.
ເຂົ້າກັນໄດ້ ຜ່ານ ໄດ້ ສະພາບແວດລ້ອມ ຕົວປ່ຽນແປງ: $MAKEPP_IGNORE_OPTS
ບາງຄັ້ງການເອີ້ນຄືນແບບເກົ່າແກ່ຜ່ານທາງເລືອກທີ່ makepp ບໍ່ເຂົ້າໃຈ.
ຫວັງວ່າທາງເລືອກບໍ່ສໍາຄັນ, ແຕ່ມັນປ້ອງກັນບໍ່ໃຫ້ makepp ແລ່ນ. ດ້ວຍນີ້
ຕົວແປສະພາບແວດລ້ອມທີ່ທ່ານສາມາດຂໍໃຫ້ makepp ບໍ່ສົນໃຈທາງເລືອກທີ່ແນ່ນອນ. ມູນຄ່າ
ຈະເປັນບັນຊີລາຍການແຍກຊ່ອງຂອງທາງເລືອກ, ຊຶ່ງສາມາດມາໃນ 4 variants:
--ຍາວ=x
ທາງເລືອກທີ່ຍາວນານທີ່ຄາດວ່າຈະມີການໂຕ້ຖຽງ. ຄວາມຈິງນີ້ຕ້ອງໄດ້ຮັບການປະກາດໂດຍຜ່ານການເທົ່າທຽມກັນ
sign, ເຖິງແມ່ນວ່າການນໍາໃຊ້ຕົວຈິງອາດຈະຖືກແຍກອອກດ້ວຍຊ່ອງຫວ່າງ, ທັງ "--long=bla" ຫຼື
"--ຍາວ bla".
--ຍາວ
ທາງເລືອກທີ່ຍາວນານໂດຍບໍ່ມີການໂຕ້ຖຽງ.
-sx ທາງເລືອກສັ້ນທີ່ຄາດວ່າຈະມີການໂຕ້ຖຽງ. ຄວາມຈິງນີ້ຕ້ອງໄດ້ຮັບການປະກາດໂດຍການເພີ່ມ
ບາງສິ່ງບາງຢ່າງໂດຍກົງຫຼັງຈາກທາງເລືອກ, ເຖິງແມ່ນວ່າການນໍາໃຊ້ຕົວຈິງອາດຈະແຍກອອກໂດຍ
ຊ່ອງຫວ່າງ, ບໍ່ວ່າຈະເປັນ "-sbla" ຫຼື "-s bla".
-s ທາງເລືອກສັ້ນໂດຍບໍ່ມີການໂຕ້ຖຽງ.
ຕົວຢ່າງເຊັ່ນ override makepp's -R option by one without a argument and accept gmake's debug
ທາງເລືອກທີ່ມີການໂຕ້ຖຽງ:
ສົ່ງອອກ MAKEPP_IGNORE_OPTS='-R --debug=x'
ຄວາມບໍ່ສອດຄ່ອງ ທີ່ ຕ້ອງການ makefile ການປ່ຽນແປງ
· Makefiles ທີ່ໂທຫາຢ່າງຊັດເຈນເຮັດໃຫ້ makepp ກໍ່ສ້າງທຸກຢ່າງຂອງມັນເອງ.
"ExtUtils::MakeMaker" ຂອງຕົນເອງຂອງ Alas Perl ປະຕິບັດຮູບແບບທີສອງຂອງສອງຮູບແບບຕໍ່ໄປນີ້.
ຄວາມຜິດພາດນີ້ເຖິງເວີຊັນ 6.56 (Perl 5.12.1):
ຍ່ອຍ:
cd subdir; ເຮັດ
MAKE = ເຮັດ
· ການຕັ້ງຄ່າ "VPATH" ຕົວແປເປັນບາງຄ່າ implicitly ໂທຫາ "vpath % value". "vpath"
ຖະແຫຼງການແມ່ນເຮັດຕາມດ້ວຍກົນໄກການເກັບຮັກສາ. ດັ່ງນັ້ນ, ບ່ອນທີ່ gmake ທົດແທນ
ເສັ້ນທາງໄປຫາໄຟລ໌ທີ່ພົບໃນ vpath, makepp ແທນທີ່ຈະເຊື່ອມຕໍ່ມັນໃນສັນຍາລັກ
ບ່ອນທີ່ມັນຈໍາເປັນ. ດັ່ງນັ້ນ makepp ຈະສະຫນອງ string unmodified, ເຊິ່ງປົກກະຕິແລ້ວ
ບໍ່ແມ່ນບັນຫາ.
ບໍ່ຮອງຮັບເປົ້າໝາຍໃນ vpath. (Gmake ພິຈາລະນາພວກເຂົາຖ້າພວກເຂົາໃຫມ່ກວ່າ
ການເພິ່ງພາອາໄສຂອງພວກເຂົາ, ແຕ່ຖ້າບໍ່ແມ່ນ, ເປົ້າຫມາຍຈະຖືກສ້າງໃຫມ່ໃນໄດເລກະທໍລີປະຈຸບັນ
-- ແທນທີ່ຈະບໍ່ສອດຄ່ອງ.) vpaths unsetting ບໍ່ໄດ້ຮັບການສະຫນັບສະຫນູນ.
· ກົດລະບຽບຮູບແບບທີ່ສະແດງໃນພາຍຫຼັງໃນ makefile ແທນທີ່ອັນທີ່ປາກົດກ່ອນໜ້ານັ້ນ.
ນີ້ແມ່ນຍ້ອນກັບຈາກ GNU ເຮັດ.
·ຂໍ້ກໍານົດຂອງກົດລະບຽບ implicit ທີ່ສ້າງຂຶ້ນແມ່ນແຕກຕ່າງກັນບາງສ່ວນຈາກທີ່ສໍາລັບ GNU ເຮັດໃຫ້,
ເຖິງແມ່ນວ່າຊື່ຕົວແປແມ່ນເຂົ້າກັນໄດ້ສ່ວນໃຫຍ່. ກົດລະບຽບການກໍ່ສ້າງຄວນຈະ
ສໍາເລັດການລວບລວມໂຄງການ C / C ++ / Fortran, ແລະໃນຄວາມເປັນຈິງອາດຈະສາມາດຄາດເດົາໄດ້
ຫ້ອງສະຫມຸດທີ່ເຫມາະສົມໃນບາງກໍລະນີເຊັ່ນດຽວກັນ. ສະຫນັບສະຫນູນສໍາລັບ Modula-2 ແລະ RatFor ແລະອື່ນໆທີ່ຫາຍາກ
ພາສາແມ່ນບໍ່ມີເຈດຕະນາ, ເພາະວ່າຂ້ອຍສືບຕໍ່ມີບັນຫາກັບ GNU
make's ກົດລະບຽບໃນເວລາທີ່ຂ້າພະເຈົ້າອຸບັດຕິເຫດນໍາໃຊ້ສ່ວນຂະຫຍາຍສໍາລັບພາສາເຫຼົ່ານັ້ນ.
· ຄຳນຳໜ້າຄຳສັ່ງຂອງ "+" ແມ່ນຖືກລະເລີຍຢ່າງງຽບໆ.
· ບໍ່ຮອງຮັບສະມາຊິກໃນແຟ້ມຈັດເກັບ, ແລະທັງຕົວແປອັດຕະໂນມັດທີ່ກ່ຽວຂ້ອງ
$%, "$(%D)", ແລະ "$(%F)".
· ບໍ່ມີການສະຫນັບສະຫນູນ SCCS.
· ການນຳໜ້າ ແລະການຕິດຕາມຊ່ອງຫວ່າງໃນການມອບໝາຍຕົວແປແມ່ນຖືກລະເລີຍ (ເຖິງແມ່ນວ່າ
ຊ່ອງຫວ່າງຖືກຕິດຕາມດ້ວຍຄໍາເຫັນ). ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມກ່ຽວກັບການຈັດການຊ່ອງຫວ່າງ
incompatibilities, ເບິ່ງ "Whitespace in variables" ໃນ makepp_variables.
· Makepp ບໍ່ພະຍາຍາມສ້າງໄຟລ໌ທີ່ລວມຢູ່ໃນຄໍາຖະແຫຼງ "ລວມ" ເວັ້ນເສຍແຕ່
makefile ມີກົດລະບຽບສໍາລັບການສ້າງພວກມັນກ່ອນທີ່ຈະມີຄໍາຖະແຫຼງການລວມ.
(ມັນຈະພະຍາຍາມທີ່ຈະສ້າງ makefile ຕົວມັນເອງ, ຢ່າງໃດກໍຕາມ.) ນີ້ແມ່ນປົກກະຕິການນໍາໃຊ້ສໍາລັບການ
ການຈັດການປະກອບມີການຂຶ້ນກັບໄຟລ໌, ແລະບໍ່ເປັນປະໂຫຍດກັບ makepp ນັບຕັ້ງແຕ່ທ່ານບໍ່ໄດ້
ຈໍາເປັນຕ້ອງເຮັດແນວນັ້ນ.
· ຕົວແປ "SHELL" ປະຈຸບັນຖືກລະເລີຍບາງສ່ວນ. Makepp ໃຊ້ສະເຫມີ / ຖັງ / sh
ເວັ້ນເສຍແຕ່ວ່າ /usr/xpg4/bin/sh or /sbin/xpg4/sh ຖືກພົບເຫັນຫຼືເວັ້ນເສຍແຕ່ວ່າທ່ານສົ່ງອອກ "SHELL"
ຕົວແປໃນ makefile ຂອງທ່ານ. ແຕ່ຖ້າທ່ານເຮັດ, parser ຄໍາສັ່ງອາດຈະບໍ່ຢ່າງເຕັມສ່ວນ
ເຂົ້າໃຈສິ່ງທີ່ຄໍາສັ່ງ shell ຂອງທ່ານເຮັດ. ໃນ Windows Strawberry ຫຼື ActiveState Perl
ທ່ານຕ້ອງຕັ້ງຕົວແປ SHELL ຂອງທ່ານແທນ ກ່ອນທີ່ຈະ ໂທຫາ makepp.
· ການເພິ່ງພາອາໄສອັນໃດອັນໜຶ່ງຢູ່ໃນ Makefile ຍັງເຮັດວຽກຢູ່, ແຕ່ປົກກະຕິແລ້ວແມ່ນບໍ່ຈຳເປັນ.
ອັນນີ້ມັກຈະຖືກໃຊ້ເພື່ອບັງຄັບໃຫ້ສ້າງຄືນໃໝ່ເມື່ອຕົວເລືອກການລວບລວມມີການປ່ຽນແປງ. Makepp ຮູ້
ເມື່ອຄໍາສັ່ງກໍ່ສ້າງມີການປ່ຽນແປງໂດຍບໍ່ມີສິ່ງໃດພິເສດໃນ makefile; ມັນເກັບຮັກສາ
ນີ້ບົນພື້ນຖານໄຟລ໌ໂດຍໄຟລ໌. ຖ້າທ່ານປ່ຽນ makefile, ມັນຮູ້ວ່າອັນໃດ
ໄຟລ໌ຕ້ອງການການລວບລວມຄືນໃຫມ່.
· ໄຟລ໌ລະດັບປານກາງບໍ່ໄດ້ຖືກລຶບ. (ເພາະວ່າ makepp ຢືນຢັນທີ່ຈະມີໄຟລ໌ທັງຫມົດ
ວັນທີແມ່ນຄືກັນກັບທີ່ເຂົາເຈົ້າຢູ່ໃນການກໍ່ສ້າງຄັ້ງສຸດທ້າຍ, ໄຟລ໌ລະດັບກາງຈະຕ້ອງເປັນທັງຫມົດ
ປະຈຸບັນ ຫຼື ການກໍ່ສ້າງຄືນໃໝ່ຈະເກີດຂຶ້ນ.) ບໍ່ມີສະຖານະພິເສດຕາມ
ໄຟລ໌ກາງ.
· ເປົ້າໝາຍພິເສດສະເພາະທີ່ຮອງຮັບແມ່ນ ".PHONY" ແລະບາງສ່ວນ ".SUFFIXES". ໄດ້
ສ່ວນທີ່ຍັງເຫຼືອແມ່ນລວມເຂົ້າກັນຢ່າງງ່າຍດາຍ.
ໂດຍສະເພາະ, GNU make ມີເປົ້າຫມາຍພິເສດດັ່ງຕໍ່ໄປນີ້:
.SUFFIXES
Makepp ບໍ່ສົນໃຈ ".SUFFIXES" ຍົກເວັ້ນກໍລະນີພິເສດຂອງ ".SUFFIXES" ທີ່ບໍ່ມີ
ການເພິ່ງພາອາໄສ, ເຊັ່ນນີ້:
.SUFFIXES:
ເຊິ່ງບອກມັນບໍ່ໃຫ້ໂຫລດກົດລະບຽບເລີ່ມຕົ້ນຂອງມັນ.
.INTERMEDIATE, .SECONDARY, .PRECIOUS
ບໍ່ມີສະຖານະພາບພິເສດແມ່ນອີງຕາມໄຟລ໌ກາງແລະດັ່ງນັ້ນເປົ້າຫມາຍເຫຼົ່ານີ້ບໍ່ແມ່ນ
ມີຄວາມໝາຍ.
.ບໍ່ສົນໃຈ
ເປົ້າໝາຍນີ້ຖືກລະເລີຍ. ຖ້າທ່ານຕ້ອງການບໍ່ສົນໃຈຄວາມຜິດພາດ, ໃສ່ຄໍາວ່າ "ignore_error"
(ຫຼືເຄື່ອງຫມາຍລົບ) ຢູ່ທາງຫນ້າຂອງຄໍາສັ່ງທີ່ມີສະຖານະການອອກແມ່ນຈະຖືກລະເວັ້ນ.
.ງຽບ
ເປົ້າໝາຍນີ້ຖືກລະເລີຍ. ຖ້າທ່ານຕ້ອງການຄໍາສັ່ງບໍ່ໃຫ້ສຽງດັງ, ໃສ່ຄໍາວ່າ "noecho"
(ຫຼືຕົວອັກສອນ "@") ຢູ່ທາງຫນ້າຂອງຄໍາສັ່ງທີ່ບໍ່ຄວນຈະຖືກສະທ້ອນ,
ຫຼືໃຊ້ຕົວເລືອກ "--silent" ເພື່ອ makepp.
.DELETE_ON_ERROR
.EXPORT_ALL_VARIABLES
.NOEXPORT
.POSIX
.ເລີ່ມຕົ້ນ
ເປົ້າໝາຍເຫຼົ່ານີ້ບໍ່ໄດ້ຮັບການສະໜັບສະໜູນ ແລະຖືກລະເລີຍຢ່າງງ່າຍດາຍ.
· GNU ເຮັດໃຫ້ຫນ້າທີ່ "eval", "ລົດຊາດ" ແລະ "ມູນຄ່າ" ບໍ່ໄດ້ຮັບການສະຫນັບສະຫນູນໃນປັດຈຸບັນ. ເຈົ້າ
ສາມາດບັນລຸສິ່ງດຽວກັນກັບ eval ໃນທາງທີ່ກົງໄປກົງມາກັບ "$[...]"
ຕົວແປຫຼືການຂະຫຍາຍຫນ້າທີ່.
· ກົດລະບຽບການຈໍ້າສອງເມັດແມ່ນບໍ່ຮອງຮັບຢ່າງເຕັມສ່ວນ. (ພວກເຂົາບໍ່ສາມາດເປັນ: ໃນແບບແຜນຂອງ makepp,
ບໍ່ສາມາດມີຫຼາຍກວ່າໜຶ່ງວິທີທີ່ຈະປັບປຸງເປົ້າໝາຍໄດ້.) ໃນປັດຈຸບັນ, ແຕ່ລະອັນສຳເລັດຜົນ
ກົດລະບຽບການຈໍ້າສອງເມັດສໍາລັບເປົ້າຫມາຍທີ່ກໍານົດພຽງແຕ່ຕື່ມຂໍ້ມູນໃສ່ສາຍຄໍາສັ່ງແລະຄວາມຂຶ້ນກັບຂອງມັນ
ລາຍຊື່ຢູ່ໃນສາຍຄໍາສັ່ງແລະລາຍຊື່ການເພິ່ງພາອາໄສສໍາລັບເປົ້າຫມາຍນີ້. ຕົວຢ່າງ, ຖ້າທ່ານ
ຂຽນນີ້:
a :: ຂ
&cat b -oa
# ຕໍ່ມາໃນ makefile ຂອງທ່ານ:
a :: ຄ
&cat c -o >>a
ມັນແມ່ນ ຢ່າງແນ່ນອນ ຄືກັນກັບວ່າເຈົ້າໄດ້ຂຽນ
a: bc
&cat b -oa
&cat c -o >>a
ນີ້ບໍ່ແມ່ນສິ່ງທີ່ກົດລະບຽບຂອງຈໍ້າສອງເມັດແມ່ນມີຈຸດປະສົງ, ແລະມັນຈະບໍ່ສະເຫມີໄປ
ເຮັດວຽກ, ແຕ່ມັນເຮັດວຽກສໍາລັບເປົ້າຫມາຍເຊັ່ນ "ສະອາດ" ຫຼືສໍາລັບສິ່ງທີ່ທັງຫມົດ
ExtUtils::MakeMaker ເຂົ້າໄປໃນ makefiles ຂອງມັນ. ຢ່ານັບມັນສໍາລັບສິ່ງອື່ນ
ກ່ວາ makefiles ມໍລະດົກ.
· ຟັງຊັນ "$(wildcard)" ບໍ່ພຽງແຕ່ກົງກັບໄຟລ໌ທີ່ມີຢູ່, ແຕ່ຍັງເປັນໄຟລ໌ທີ່
ຍັງບໍ່ທັນມີ, ແຕ່ວ່າມີກົດລະບຽບທີ່ makepp ໄດ້ເຫັນໃນເວລານັ້ນ
ຟັງຊັນ "$(wildcard )" ຖືກປະເມີນ.
· ຄໍາຖະແຫຼງທີ່ "ກໍານົດ" ແມ່ນສະຫນັບສະຫນູນ, ແຕ່ການຈັດການ "@" ລ່ວງຫນ້າແມ່ນເຮັດໄດ້
ແຕກຕ່າງກັນ. ໃນປັດຈຸບັນຢູ່ໃນ makepp, "@" ຢູ່ທາງຫນ້າຂອງຕົວແປທີ່ມີຫຼາຍແຖວ
ຄ່າພຽງແຕ່ຈະສະກັດກັ້ນການສະທ້ອນຂອງແຖວທໍາອິດ. ຍົກຕົວຢ່າງ,
ກໍານົດເສັ້ນ echo-lines
&echo line1 -o $@
&echo line2 -o>>$@
ສິ້ນສຸດ
x:
@$(ສາຍສຽງ)
ຈະບໍ່ສະກັດກັ້ນການພິມ "&echo line2" ຍ້ອນວ່າມັນເຮັດຢູ່ໃນ GNU; ມັນຈະພຽງແຕ່
ສະກັດກັ້ນການພິມ "&echo line1".
· Makepp ບໍ່ສະຫນັບສະຫນູນຕົວແປສະພາບແວດລ້ອມຕໍ່ໄປນີ້ (ມັນບໍ່ໄດ້ຕັ້ງຄ່າພວກມັນ,
ແລະມັນພຽງແຕ່ບໍ່ສົນໃຈພວກເຂົາ):
ເຮັດໄດ້
MFLAGS
ຄວາມບໍ່ສອດຄ່ອງ in ຄໍາສັ່ງ of ການສະແດງອອກ ການຂະຫຍາຍຕົວ
· ໃນ makepp, ການປະຕິບັດກົດລະບຽບແມ່ນໄດ້ຮັບການຂະຫຍາຍຕົວກ່ອນທີ່ຈະຮັບປະກັນການຂຶ້ນທັງຫມົດ
ໄດ້ຮັບການກໍ່ສ້າງ. ທ່ານສາມາດເຮັດວຽກໄດ້ໂດຍການປ່ຽນແປງກົດລະບຽບເຊັ່ນນີ້:
foo: ບາ
genfoo < $(ແຖບແມວຫອຍ)
ເຖິງນີ້:
foo: ບາ
genfoo < `ແຖບແມວ`
ຫຼືນີ້, ເຊິ່ງຈະເຮັດໃຫ້ໄຟລ໌ໃນລະຫວ່າງການຂະຫຍາຍ:
foo: ບາ
genfoo < $(&cat $(ເຮັດແຖບ))
ອັນນີ້ມັກຢູ່ບ່ອນນີ້, ເພາະວ່າໄຟລ໌ທີ່ລະບຸໄວ້ໃນ ພາທະນາຍຄວາມ ຍັງເປັນການຂຶ້ນກັບນີ້
ກົດລະບຽບ, ແລະ makepp ປະຈຸບັນສາມາດຈັບມັນໃນເວລາທີ່ການວິເຄາະ lexically ການປ່ຽນເສັ້ນທາງ.
·ເຖິງແມ່ນວ່າຂ້າພະເຈົ້າບໍ່ໄດ້ເຫັນການນໍາໃຊ້ນີ້, GNU ເຮັດໃຫ້ອະນຸຍາດໃຫ້ດັ່ງຕໍ່ໄປນີ້:
ຈໍ້າສອງເມັດ = :
a$(colon) ຂ
ສະທ້ອນ $^
Makepp ຂະຫຍາຍ "$(colon)" ຊ້າເກີນໄປສໍາລັບການເຮັດວຽກນີ້. ຢ່າງໃດກໍຕາມ, ມັນສະຫນອງການ
ທາງເລືອກ "$[colon]" syntax, ເຊິ່ງສາມາດເຮັດໄດ້ຫຼາຍກ່ວາ GNU ເຮັດ, ເພາະວ່າມັນແມ່ນ
ຂະຫຍາຍໄວຫຼາຍ.
"$(ເຮັດ)" ອາດຈະ ປະກອບດ້ວຍ spaces
ໃນ makepp ທີ່ຖອນການຕິດຕັ້ງຫຼືຖ້າເວທີເບິ່ງຄືວ່າບໍ່ສະຫນັບສະຫນູນການເລີ່ມຕົ້ນ Perl script
ໂດຍຕົວເລກ magic ຫຼືດ້ວຍ "--traditional-recursive-make" ຕົວແປນີ້ຈະປະກອບມີຢ່າງຫນ້ອຍ.
ຫນຶ່ງຊ່ອງ. ນັ້ນບໍ່ແມ່ນບັນຫາໃນເວລາທີ່ໃຊ້ມັນເປັນຄໍາສັ່ງ. ແຕ່ເມື່ອຜ່ານມັນເປັນ
unquoted parameter ກັບ script (ເປັນ Perl 5.14.0 build system ເຮັດ), ມັນຈະ tear ມັນ.
ແຍກເຂົ້າໄປໃນຕົວກໍານົດການແຍກຕ່າງຫາກ, ນໍາໄປສູ່ຄວາມສັບສົນ. ດັ່ງນັ້ນເປັນພາລາມິເຕີ, ມັນປອດໄພກວ່າ
ອ້າງເຖິງມັນເປັນ '$(MAKE)'. ເຊິ່ງບໍ່ໄດ້ທໍາລາຍຄວາມເຂົ້າກັນໄດ້ກັບຫລັງ.
ເປົ້າໝາຍສະເພາະ ວຽກມອບ ໝາຍ ບໍ່ໄດ້ ຂະຫຍາຍພັນ
ຕົວແປເປົ້າຫມາຍສະເພາະຂອງ Makepp ແມ່ນແຕກຕ່າງກັນເລັກນ້ອຍຈາກ GNU make's ໃນວ່າພວກເຂົາ
ພຽງແຕ່ນໍາໃຊ້ກັບກົດລະບຽບສໍາລັບຫນຶ່ງໄຟລ໌ທີ່ໄດ້ກ່າວມາ, ແລະບໍ່ແມ່ນກັບ predecessors ໃດໆຂອງມັນ; ເບິ່ງ
ການມອບໝາຍເປົ້າໝາຍສະເພາະ.
ວົງເລັບ or ເຊືອກຜູກ ບໍ່ໄດ້ nest
Makepp ສິ້ນສຸດການສະແດງອອກຢູ່ທີ່ວົງເລັບຫຼືວົງເລັບທີ່ກົງກັນຄັ້ງທໍາອິດ. ແທນທີ່ຈະນີ້
$(somefunction ... ( ) ...) # GNU make style
ທ່ານຕ້ອງໃຊ້ທັງສອງອັນນີ້
${somefunction ... ( ) ...} # GNU ເຮັດໃຫ້ເຂົ້າກັນໄດ້
$(( somefunction ... ( ) ...)) # ການຂະຫຍາຍ Makepp
ນີ້ອາດຈະຖືກແກ້ໄຂໃນຮຸ່ນ 2.1, ອາດຈະເປັນທາງເລືອກ.
ເລັກນ້ອຍ ຈຸດ
ການເພິ່ງພາອາໄສຮູບແບບບໍ່ກົງກັບເປົ້າໝາຍທີ່ຫຼອກລວງ
%.a: %.b; ...
$(phony xb): ; ... #ບໍ່ໄດ້ໃຫ້ວິທີການສ້າງ xa
ຄຳເຫັນບໍ່ມີແຖວຕໍ່ເນື່ອງ
# ນີ້ແມ່ນ \
ບໍ່ແມ່ນຄຳເຫັນ 2 ແຖວ
ຄໍາສັ່ງ ອອນໄລນ໌ ຄວາມບໍ່ສອດຄ່ອງ
Makepp ສະຫນັບສະຫນູນສອງສາມທາງເລືອກແຖວຄໍາສັ່ງທີ່ເປັນປະໂຫຍດກວ່າ. ຕໍ່ໄປນີ້, ຢ່າງໃດກໍຕາມ,
ບໍ່ຮອງຮັບ:
-d ຫຼື --debug
-f -
ວັດຖຸ makefile ພາຍໃນຂອງ Makepp ແມ່ນເຊື່ອມຕໍ່ກັບວັດຖຸໄຟລ໌, ດັ່ງນັ້ນມັນບໍ່ສາມາດຈັດການໄດ້
stdin.
-i
-l ຫຼື --load-average ຫຼື --max-load
-m ທາງເລືອກ "-m" ຂອງ Makepp ແມ່ນກ່ຽວຂ້ອງກັບການເລືອກວິທີການລາຍເຊັນ, ໃນຂະນະທີ່ GNU ເຮັດ
ບໍ່ສົນໃຈ - ມ.
-p ຫຼື --print-data-base
-q ຫຼື --ຄໍາຖາມ
-R ຫຼື --no-builtin-variables
ທາງເລືອກ "-R" ຂອງ Makepp ຕົວຈິງແລ້ວເຮັດບາງສິ່ງບາງຢ່າງທີ່ແຕກຕ່າງກັນຫມົດ.
-S --ບໍ່-ສືບຕໍ່ ຫຼື --ຢຸດ
ທາງເລືອກ "--stop" ຢຸດ (ເຮັດໃຫ້ນອນ) makepp ຫຼັງຈາກການຮຽນຮູ້ກົດລະບຽບທັງຫມົດ, ດັ່ງນັ້ນທ່ານ
ສາມາດສືບຕໍ່ແກ້ໄຂໄດ້.
-t ຫຼື --touch
-w ຫຼື --print-directory
ນີ້ເກີດຂຶ້ນໂດຍອັດຕະໂນມັດ.
--warn-undefined-variables
ບາງສ່ວນຂອງເຫຼົ່ານີ້ສາມາດໄດ້ຮັບການສະຫນັບສະຫນູນໄດ້ຢ່າງງ່າຍດາຍຖ້າຫາກວ່າໃຜສົນໃຈ.
ການປ່ຽນແປງ ຄວາມບໍ່ສອດຄ່ອງ
Makepp ເບິ່ງໃນ $PATH ສໍາລັບຄໍາສັ່ງທີ່ກົງກັນເພື່ອກັບຄືນສໍາລັບຕົວແປເຊັ່ນ "$(CC)" ຫຼື
"$(CXX)", ໃນຂະນະທີ່ GNU make ມີຄ່າເລີ່ມຕົ້ນແບບຄົງທີ່. ນອກຈາກນີ້ makepp ໃຫ້ຄວາມຕ້ອງການກັບ "gcc" ແລະ
"g ++" ໃນຂະນະທີ່ເປັນເລື່ອງແປກທີ່ GNU ໃຫ້ຜົນຕອບແທນ "cc" ສໍາລັບອະດີດ, ແຕ່ຄືກັນສໍາລັບ
ຕໍ່ມາ. ທ່ານສາມາດ override ເຫຼົ່ານີ້ຢູ່ໃນ makefile, ໃນເສັ້ນຄໍາສັ່ງຫຼືໂດຍການສົ່ງອອກ a
ຕົວແປຂອງຊື່ດຽວກັນກ່ອນທີ່ຈະເອີ້ນ makepp.
ໃຊ້ makepp_incompatibilities ອອນລາຍໂດຍໃຊ້ບໍລິການ onworks.net