GNU Make を使用した同様のルールでの複数の実行可能ファイルのビルド
Scons は有能なビルド ツールですが、目的の機能を実装するのは困難な場合があります。より簡単なアプローチは、GNU Make を利用することです。これにより、トップレベルのプロジェクト ディレクトリと個々のプロジェクト ディレクトリの両方から簡単にビルドとクリーンアップが可能になります。
Makefile Setup
提供される 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
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))
使用法
個々のプロジェクト ディレクトリからの構築
[project_directory]$ ln -s ../project.mk Makefile # create a symlink [project_directory]$ make
最上位ディレクトリからの構築
[all_lessons]$ make
個々のプロジェクト ディレクトリのクリーニング
[project_directory]$ cd .. [all_lessons]$ make clean
すべてのプロジェクトのクリーニング
[all_lessons]$ make clean
以上がGNU Make を使用して同様のルールで複数の実行可能ファイルをビルドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。