ホームページ > バックエンド開発 > C++ > GNU Make を使用して同様のルールで複数の実行可能ファイルをビルドするにはどうすればよいですか?

GNU Make を使用して同様のルールで複数の実行可能ファイルをビルドするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-28 14:56:02
オリジナル
968 人が閲覧しました

 How to Build Multiple Executables with Similar Rules Using GNU Make?

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 サイトの他の関連記事を参照してください。

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