Makeの暗黙のルールは、Makefileの記述を容易にするためにあると思われますが、私の理解が正しければ、Cファイルがヘッダーファイルに依存している場合は、ルールを明示的に記述する必要があります。私は正しいですか?ほとんどのCファイルはいくつかのヘッダーファイルに依存しているため、これは暗黙のルールの有用性を著しく低下させるように思われます。そのため、おそらく何かが足りないと思いました。
質問する
2956 次
3 に答える
8
次のメイクファイル スニペットを使用して、gcc でヘッダーの依存関係を自動生成できます。
SOURCES := $(wildcard *.c)
DEPS := $(SOURCES:%.c=%.d)
CFLAGS += -MMD
-include $(DEPS)
特定のルールセットで動作するようにコードを調整する必要がある場合があります。
于 2012-05-09T18:00:55.783 に答える
6
ルールを記述する必要はなく、依存関係のみを記述します。例:
foo.o : foo.h bar.h
ファイル foo.o は引き続き暗黙のルールによって生成されますが、追加の依存関係foo.h
とbar.h
. この依存関係の行は、ほとんどのコンパイラで自動生成することもできます。
于 2012-05-09T17:22:14.450 に答える
2
make
Cファイル内を読み込んで、どのヘッダーが含まれているかを判断するユーティリティではありません。ファイルの変更されたタイムスタンプに基づいて機能します。したがって、ターゲットがヘッダーまたはその他のファイルに依存しているかどうかに関係なく、依存関係を明示的に伝える必要がありますmake
。
gcc
このような依存関係リストを生成することで、仕事を楽にすることができます
main.c
#include<stdio.h>
#include"my_header.h"
int main ()
{
return 0;
}
その後、
gcc -M main.c
現在、-M
プリプロセッサ フラグを使用すると、次のような依存関係リストが自動的に生成されます。
main.o: main.c /usr/include/stdio.h /usr/include/features.h \
/usr/include/bits/predefs.h /usr/include/sys/cdefs.h \
/usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
/usr/include/gnu/stubs-64.h \
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \
/usr/include/bits/types.h /usr/include/bits/typesizes.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \
/usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
my_header.h
gcc
内部のすべてのインクルードも把握しましたstdio.h
!
于 2012-05-09T17:18:37.150 に答える