使用GNU Make 建立具有類似規則的多個可執行檔
雖然Scons 是一個功能強大的建置工具,但實作所需的功能可能具有挑戰性。更直接的方法是利用 GNU Make,它可以輕鬆地從頂級和單一專案目錄進行建置和清理。
Makefile 設定
提供的 makefile啟用從 all_lessons 目錄和單一專案目錄進行建置和清理。每個項目的可執行檔均以其目錄命名。
專案結構
要實現此目的,您需要設定與提供的範例類似的專案結構:
all_lessons/ helloworld/ lesson.cpp main.cpp even_or_odd/ lesson.cpp main.cpp calculator/ lesson.cpp user_created_add.cpp main.cpp
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))
從各個專案目錄建置
從頂層目錄建置
[project_directory]$ ln -s ../project.mk Makefile # create a symlink [project_directory]$ make
單一項目目錄
[all_lessons]$ make
清理所有項目
[project_directory]$ cd .. [all_lessons]$ make clean
以上是如何使用 GNU Make 建立具有相似規則的多個可執行檔?的詳細內容。更多資訊請關注PHP中文網其他相關文章!