ພາສາອັງກິດພາສາຝຣັ່ງແອສປາໂຍນ

Ad


OnWorks favicon

makepp_incompatibilities - ອອນລາຍໃນຄລາວ

ເປີດໃຊ້ makepp_incompatibilities ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີຜ່ານ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ນີ້ແມ່ນຄໍາສັ່ງ 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


ເຊີບເວີ ແລະສະຖານີເຮັດວຽກຟຣີ

ດາວໂຫຼດແອັບ Windows ແລະ Linux

Linux ຄຳ ສັ່ງ

Ad