GNU Make を使用した同様のルールで実行可能ファイルのビルド
Scon の代替として、GNU Make はタスクの効率的なソリューションとなります。 GNU Make を使用すると、依存関係解決システムを通じて柔軟なビルド プロセスを定義できます。
GNU Make アプローチ
上からのビルドとクリーニングを可能にする 2 つの Makefile を紹介します。 -レベルのディレクトリ (all_lessons) と個々のプロジェクト ディレクトリ:
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))
利点
使用法
個別にビルドするにはプロジェクト ディレクトリにある場合は、そのディレクトリ内に project.mk へのシンボリック リンクを Makefile として作成します。 all_lessons ディレクトリからビルドまたはクリーンアップするとすべてのプロジェクトが処理されますが、プロジェクトのディレクトリからビルドまたはクリーンアップすると、そのプロジェクトにのみ影響します。
このアプローチは、さまざまなディレクトリから同様のルールを持つ複数の実行可能ファイルをビルドするクリーンで柔軟な方法を提供します。
以上がGNU Make を使用して、異なるディレクトリから同様のルールを持つ複数の実行可能ファイルを効率的にビルドするにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。