複数の .cpp ファイルを効率的にコンパイルおよびリンクできますか?
質問は、複数の .cpp ファイルを 1 つのファイルにコンパイルする Makefile の作成を中心にしています。指定されたソース ディレクトリ (src/) を、別のオブジェクト ディレクトリ (obj/) 内の対応する .o ファイルに変換し、最後に結果の .o ファイルをプロジェクトのルート ディレクトリ (./) の実行可能バイナリにリンクします。
Makefile の実装
これを Makefile で実現するには、次のように定義します。次の変数とルール:
SRC_DIR = src/ OBJ_DIR = obj/ SRC_FILES = $(wildcard $(SRC_DIR)/*.cpp) OBJ_FILES = $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRC_FILES)) LDFLAGS = ... # Linker flags CPPFLAGS = ... # Preprocessor flags CXXFLAGS = ... # Compiler flags main.exe: $(OBJ_FILES) g++ $(LDFLAGS) -o $@ $^ $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp g++ $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
この Makefile は最初に次の変数とルールのリストを生成します。 .cpp ファイルを src/ ディレクトリに保存し、それを SRC_FILES 変数に保存します。次に、このリストを obj/ ディレクトリ内の対応する .o ファイルのリストに変換し、OBJ_FILES 変数に保存します。
各 .cpp ファイルを対応するファイルにコンパイルするために g コンパイラが使用されます。 .o ファイルを作成し、g リンカーを使用してすべての .o ファイルをリンクし、最終的な実行可能バイナリを作成します。 main.exe.
グッド プラクティスと標準的なアプローチ
このアプローチは複数の .cpp ファイルのコンパイルとリンクに機能しますが、より標準化されたアプローチがあることは注目に値します。
そのようなアプローチの 1 つは、CMake や Bazel などのビルド システムの使用です。これらのシステムは、自動依存関係計算やクロスプラットフォーム サポートなど、コンパイルとリンクのプロセスを管理するためのより包括的なツールと機能のセットを提供します。
以上が複数の .cpp ファイルを効率的にコンパイルおよびリンクするための Makefile を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。