Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah GNU Make boleh digunakan untuk membina berbilang boleh laku dengan cekap dengan peraturan serupa daripada direktori berbeza?
Membina Executable dengan Peraturan Serupa Menggunakan GNU Make
Sebagai alternatif kepada Scons, GNU Make boleh menjadi penyelesaian yang cekap untuk tugas anda. GNU Make membenarkan anda mentakrifkan proses binaan yang fleksibel melalui sistem resolusi pergantungannya.
GNU Make Approach
Kami membentangkan dua makefiles yang membolehkan pembinaan dan pembersihan dari kedua-dua bahagian atas -direktori peringkat (semua_pelajaran) dan direktori projek individu:
project.mk
all : % : forward_ # build any target by forwarding to the main makefile $(MAKE) -C .. project_dirs=$(notdir ${CURDIR}) $@ .PHONY : forward_
Makefile
# one directory per project, one executable per directory project_dirs := $(shell find * -maxdepth 0 -type d ) # executables are named after its directory and go into the same directory exes := $(foreach dir,${project_dirs},${dir}/${dir}) all : ${exes} # the rules .SECONDEXPANSION: objects = $(patsubst %.cpp,%.o,$(wildcard $(dir )*.cpp)) # link ${exes} : % : $$(call objects,$$*) Makefile g++ -o $@ $(filter-out Makefile,$^) ${LDFLAGS} ${LDLIBS} # compile .o and generate dependencies %.o : %.cpp Makefile g++ -c -o $@ -Wall -Wextra ${CPPFLAGS} ${CXXFLAGS} -MD -MP -MF ${@:.o=.d} $< .PHONY: clean clean : rm -f $(foreach exe,${exes},$(call objects,${exe})) $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d)) ${exes} # include auto-generated dependency files -include $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d))
Kelebihan
Penggunaan
Untuk membina daripada individu direktori projek, buat pautan simbolik ke project.mk sebagai Makefile dalam direktori itu. Membina atau membersihkan daripada direktori all_lessons akan memproses semua projek, manakala berbuat demikian daripada direktori projek hanya akan menjejaskan projek itu.
Pendekatan ini menyediakan cara yang bersih dan fleksibel untuk membina berbilang boleh laku dengan peraturan yang serupa daripada pelbagai direktori.
Atas ialah kandungan terperinci Bagaimanakah GNU Make boleh digunakan untuk membina berbilang boleh laku dengan cekap dengan peraturan serupa daripada direktori berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!