GNU Make を使用して同様のルールで複数の実行可能ファイルをビルドする
質問:
GNU Make はできますかディレクトリ構造内で同様のルールを持つ複数の実行可能ファイルのビルドを容易にし、メイン ディレクトリと個々のプロジェクト ディレクトリの両方からコンパイルできるようにしますか?
答え:
はい、GNU Make で処理できます。このタスクを簡潔かつ効率的なアプローチで実行します。以下は、目的の機能を実装する 2 つの Makefile:
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))
使用法:
利点:
以上がGNU Make は、ディレクトリ構造全体にわたって同様のルールを使用して多数の実行可能ファイルの構築を効率化し、メイン ディレクトリと個々のプロジェクト フォルダの両方からコンパイルできるようにすることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。