7

Makeの暗黙のルールは、Makefileの記述を容易にするためにあると思われますが、私の理解が正しければ、Cファイルがヘッダーファイルに依存している場合は、ルールを明示的に記述する必要があります。私は正しいですか?ほとんどのCファイルはいくつかのヘッダーファイルに依存しているため、これは暗黙のルールの有用性を著しく低下させるように思われます。そのため、おそらく何かが足りないと思いました。

4

3 に答える 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.hbar.h. この依存関係の行は、ほとんどのコンパイラで自動生成することもできます。

于 2012-05-09T17:22:14.450 に答える
2

makeCファイル内を読み込んで、どのヘッダーが含まれているかを判断するユーティリティではありません。ファイルの変更されたタイムスタンプに基づいて機能します。したがって、ターゲットがヘッダーまたはその他のファイルに依存しているかどうかに関係なく、依存関係を明示的に伝える必要があります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 に答える