ホームページ > バックエンド開発 > C++ > GNU Make を使用して、異なるディレクトリから同様のルールを持つ複数の実行可能ファイルを効率的にビルドするにはどうすればよいでしょうか?

GNU Make を使用して、異なるディレクトリから同様のルールを持つ複数の実行可能ファイルを効率的にビルドするにはどうすればよいでしょうか?

Linda Hamilton
リリース: 2024-10-29 08:42:03
オリジナル
745 人が閲覧しました

How can GNU Make be used to efficiently build multiple executables with similar rules from different directories?

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))
ログイン後にコピー

利点

  • シンプルさ: GNU Make は初心者でも簡単で理解しやすいです。
  • 拡張性: Makefile はカスタム ターゲットとルールを使用して簡単に拡張できます。
  • 並列化可能: GNU Make は複数のターゲットを同時にビルドできるため、大規模なプロジェクトを効率的に行うことができます。
  • 自動依存関係追跡: Make は依存関係を自動的に検出して更新し、必要なターゲットのみがビルドされるようにします。

使用法

個別にビルドするにはプロジェクト ディレクトリにある場合は、そのディレクトリ内に project.mk へのシンボリック リンクを Makefile として作成します。 all_lessons ディレクトリからビルドまたはクリーンアップするとすべてのプロジェクトが処理されますが、プロジェクトのディレクトリからビルドまたはクリーンアップすると、そのプロジェクトにのみ影響します。

このアプローチは、さまざまなディレクトリから同様のルールを持つ複数の実行可能ファイルをビルドするクリーンで柔軟な方法を提供します。

以上がGNU Make を使用して、異なるディレクトリから同様のルールを持つ複数の実行可能ファイルを効率的にビルドするにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート