私はGCCでコンパイルされた巨大なプロジェクトを持っています。 私が知っているのは、通常、実行前ビルドはすべてではなく、最新の依存関係ですが、変更されたファイルの一部が再構築されていないということが分かります。 .h makeファイルの階層があり、メインのmakeファイルには、必要に応じて必要なmakeファイルが含まれています。 には、最近変更された.hファイルを "#include"するファイルの再構築を保証する方法がありますか?自動再構築依存関係(メイクファイル)
答えて
ヘッダーファイルが前提条件に正しくリストされていることを確認する必要があります。大規模なプロジェクトでは、これを手作業で行うことは不可能ですが、gcc
(またはclang
)とGNU Makeを組み合わせると、それを自動化する強力な方法が得られます。
gcc
によって生成された追加の前提条件を追加するファイルをインクルードするようにしてください
CC := gcc
CFLAGS := -std=c11 -Wall -Wextra -pedantic
OBJS := main.o module.o
all: program
program: $(OBJS)
$(CC) [email protected] $^
%.o: %.c
$(CC) -c $(CFLAGS) [email protected] $<
clean:
rm -f *.o
.PHONY: all clean
は、その後、あなたがGNUのMakefileの機能の自動リメイクを使用することができます。
あなたはかなり標準のMakefile用いたパターンルールを持っていると仮定すると、
CC := gcc
CFLAGS := -std=c11 -Wall -Wextra -pedantic
OBJS := main.o module.o
all: program
program: $(OBJS)
$(CC) [email protected] $^
# rule to create "dependency files", make the dependency file itself
# depend on the same prerequisites
%.d: %.c
$(CC) -MM -MT"[email protected] $(@:.d=.o)" [email protected] $(CFLAGS) $<
# include dependency files except for targets not building anything
ifneq ($(filter-out clean,$(MAKECMDGOALS)),)
-include $(OBJS:.o=.d)
endif
# add Makefiles themselves to prerequisites here (with a changed Makefile,
# the only safe thing is to rebuild all):
%.o: %.c Makefile
$(CC) -c $(CFLAGS) [email protected] $<
# remove dependency files on clean
clean:
rm -f *.o *.d
.PHONY: all clean
これは単なる例であり、これらの機能をどのように使用するかについてはさまざまな可能性があります。
主な質問は、すべての.hファイルを独立して指定する必要があるか、またはソース(c)ファイルが十分である必要があるかどうかです。 – Itay
MakeはCファイルを解析しません。すべての.hファイルは、依存関係として個別に指定する必要があります。フェリックスはコンパイラに手作業で行うのではなく、自動的にこれを行う方法を示しています。上記以外の方法(より良い、より良い、IMO)の方法については、http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/を読むこともできます。 – MadScientist
@Itayあなたは私の答えとMadScientistsのコメントを理解していないか、あなたの質問を理解できません。 –
- 1. メイクファイル:ネストされた依存関係
- 2. は自動的に命名し、次のメイクファイルの抜粋で依存関係ファイル
- 3. IntelliJ Artifact自動インポートMaven依存関係?
- 4. CMAKE自動ヘッダファイルの依存関係
- 5. 自動ファクシミリの依存関係
- 6. CMAKE:依存関係の依存関係を自動的に追加します
- 7. mavenプロジェクトは独自の依存関係を構築していますか?
- 8. GrailsとMavenで依存関係を構築する
- 9. 依存関係のないライブラリを構築する
- 10. Herokuを回避するグローバル依存関係を構築する
- 11. 依存関係のプロパティ依存関係
- 12. 依存関係の依存関係
- 13. 関係データの再構築方法は?
- 14. Shell32.libへの依存関係をWDKメイクファイルに追加
- 15. メイクファイルの依存関係を見つける
- 16. メイクファイルとライブラリの依存関係が悪いですか?
- 17. メイクファイルとそれらのターゲットと依存関係
- 18. OCamlのメイクファイルの依存関係の問題
- 19. 既存の依存関係の自動インポート
- 20. 依存関係の依存関係をsbtでインポートし、フレームワークを再生
- 21. 再帰的依存関係を作成
- 22. 再生!フレームワーク1.2.4、依存関係、Netbeans 7
- 23. 依存関係のプロパティの再入力
- 24. 依存プロジェクトの強制再ビルド(最初にビルド依存関係)
- 25. 依存関係
- 26. 依存関係
- 27. Dagger 2の再起動方法Retrofits 2の依存関係2
- 28. C++の#include依存関係を自動的にソート
- 29. 依存関係をエンタープライズリポジトリに自動的に展開する
- 30. perlにperl依存関係を自動的にインストールする
各ターゲットが依存するファイルのmakefileを宣言します。ツールによっては、そのような依存関係リストを自動的に作成することができます。 –
makefileには、再構築を決定するためにファイルをチェックするルールがあります。通常これにはソースファイルのみが含まれます。 .Hファイルをルールセットに追加するだけです。 – Devolus
[Auto-Dependency Generation](http://make.mad-scientist.net/papers/advanced-auto- dependency-generation/) –