Membina Berbilang Boleh Laksana dengan Peraturan Serupa Menggunakan GNU Make
Walaupun Scons ialah alat binaan yang berkebolehan, melaksanakan fungsi yang diingini mungkin mencabar. Pendekatan yang lebih mudah ialah menggunakan GNU Make, yang membolehkan pembinaan dan pembersihan mudah daripada kedua-dua direktori projek peringkat atas dan individu.
Persediaan Makefile
Fail make yang disediakan membolehkan pembinaan dan pembersihan daripada kedua-dua direktori all_lessons dan direktori projek individu. Boleh laku setiap projek dinamakan sempena direktorinya.
Struktur Projek
Untuk mencapainya, anda perlu menyediakan struktur projek yang serupa dengan contoh yang diberikan:
all_lessons/ helloworld/ lesson.cpp main.cpp even_or_odd/ lesson.cpp main.cpp calculator/ lesson.cpp user_created_add.cpp main.cpp
Kandungan Makefile
project.mk
all : % : forward_ # build any target by forwarding to the main makefile $(MAKE) -C .. project_dirs=$(notdir ${CURDIR}) $@ .PHONY : forward_
Makefile
🎜># project configuration project_dirs := $(shell find * -maxdepth 0 -type d ) exes := $(foreach dir,${project_dirs},${dir}/${dir}) all : ${exes} # 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 dependency files -include $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d))
Penggunaan
Membina daripada Direktori Projek Individu
[project_directory]$ ln -s ../project.mk Makefile # create a symlink [project_directory]$ make
Membina daripada Direktori Peringkat Atas
[all_lessons]$ make
Membersihkan Direktori Projek Individu
[project_directory]$ cd .. [all_lessons]$ make clean
Membersihkan Semua Projek
Atas ialah kandungan terperinci Bagaimana untuk Membina Berbilang Boleh Laksana dengan Peraturan Serupa Menggunakan GNU Make?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!