Linux で C++ プロジェクトを使用しています。GNU make と GCC を使用しています
次のルールがあります。
all: ...
version:
config:
rm -f config.h
@$(MAKE) --no-print-directory config.h
config.h:
# ..... create the file config.h here
make version はビルド番号を増やします。1.1-123、次に 1.2-124 ... など。 バージョンは config.h ファイルに記述されており、config.h はプロジェクト内のすべてのファイルに含まれています。
現在、config.h は次のいずれかの場合に再構築されるという考えがあります: - プログラムのバージョンをリリースするとき (単なる開発/テストではなく) - それが存在しないとき
だから私はこの依存関係を作りたくありません:
all: config
config: version
変更されたファイルだけでなく、すべてのメイクで構成ファイルが再構築され、すべてのファイルが再コンパイルされるためです。そのため、開発中に構成ファイルを再構築したくありませんが、今すぐ再構築する場合に限りmake release_version
ます。そのルールは次のとおりです。
release_version: config version all
問題はmake release_version -j 3
、3 つのターゲット (config、version、all) すべてを同時に作成することです。これは、バージョンが config.h の作成の準備ができていない可能性があることを意味し、config.h の準備ができていない可能性があることを意味します。all
. したがって、この依存関係を作成する必要があります。
release_version: すべて すべて: 構成 構成: バージョン
make release_version
ただし、が実行された場合のみ。make all
これらの依存関係を持ちたくありません。
多分私は次のようなものが必要です:
release_version: version_release config_release all_release
all_release: 構成 config_release: 構成 version_release: バージョン