ホームページ > バックエンド開発 > C++ > Makefile を使用してプロジェクト内の複数の .cpp ファイルをコンパイルしてリンクするにはどうすればよいですか?

Makefile を使用してプロジェクト内の複数の .cpp ファイルをコンパイルしてリンクするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-01 00:15:02
オリジナル
778 人が閲覧しました

How can I compile and link multiple .cpp files in a project using a Makefile?

Makefile を使用した複数の .cpp ファイルのコンパイルとリンク

プロジェクト開発では、複数のソース ファイルの管理が面倒になることがあります。 Makefile は、コンパイルとリンクのプロセスを自動化する合理的な方法を提供します。この場合の目標は、「/src」ディレクトリ内のすべての「.cpp」ファイルを「/obj」ディレクトリ内の「.o」ファイルにコンパイルし、それらをルート フォルダ内のバイナリ実行可能ファイルにリンクすることです。

Makefile の実装

これを実現するには、次の内容で Makefile を作成できます:

<code class="makefile"># Define directories
SRC_DIR = src
OBJ_DIR = obj

# Get all .cpp files in the src directory
SRC_FILES = $(wildcard ${SRC_DIR}/*.cpp)

# Derive .o files from .cpp files
OBJ_FILES = $(patsubst ${SRC_DIR}/%.cpp, ${OBJ_DIR}/%.o, ${SRC_FILES})

# Linker flags
LDFLAGS = ...

# C compiler flags
CPPFLAGS = ...

# C++ compiler flags
CXXFLAGS = -std=c++11 -MMD -MP

# Target binary
main.exe: ${OBJ_FILES}
    g++ ${LDFLAGS} -o $@ $^

# Compile .cpp to .o in obj/ directory
${OBJ_DIR}/%.o: ${SRC_DIR}/%.cpp
    g++ ${CPPFLAGS} ${CXXFLAGS} -c -o $@ $<

# Include automatically generated dependencies
-include ${OBJ_FILES:.o=.d}</code>
ログイン後にコピー

説明

  • Makefile は、ソース、オブジェクト ファイル、および最終バイナリのディレクトリを定義します。
  • 「/src」ディレクトリ内のすべての「.cpp」ファイルを識別し、対応するファイルのリストを作成します。 ".o" ファイル。
  • 必要に応じてカスタム コンパイラ フラグを定義できます。
  • メイン ターゲット "main.exe" はすべての ".o" ファイルに依存します。
  • 各「.cpp」ファイルを「/obj」ディレクトリ内の「.o」ファイルにコンパイルするルールが設定されています。
  • 依存関係の管理に役立つ「-MMD」フラグを使用して依存関係グラフの自動生成が有効になります。ソースの変更に基づきます。
  • 「-MP」フラグにより​​、生成された依存関係ファイルがソース ファイルと同じディレクトリに確実に配置され、メンテナンスが簡素化されます。

ベスト プラクティス

複数の「.cpp」ファイルをコンパイルおよびリンクするこのアプローチは一般的に使用されており、標準的な慣行に従っています。これにより、効率的なコンパイルとリンクを確保しながら、Makefile を通じてソース ファイルを柔軟に管理できます。

以上がMakefile を使用してプロジェクト内の複数の .cpp ファイルをコンパイルしてリンクするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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