Makeの暗黙のルールはMakefileを書くのを簡単にすると思われますが、私の理解が正しいならば、私のCファイルがヘッダファイルに依存するなら、明示的にルールを書く必要があります。私は正しい?ほとんどのCファイルは2つのヘッダファイルに依存しているので、これは暗黙のうちに暗黙のルールの有用性を低下させるようです。暗黙的なルールとヘッダファイルを作る
答えて
ルールを記述する必要はなく、依存関係のみを記述する必要があります。例:
foo.o : foo.h bar.h
ファイルfoo.oのは、まだ暗黙のルールによって生成されたが、追加の依存関係foo.h
とbar.h
を持っています。この依存関係の行は、ほとんどのコンパイラで自動生成することもできます。
ありがとうございます。これは少なくとも負担を軽減します!ところで、私はMakefilesを書いているコンパイラについて聞いたことがありません。それはどのように機能するのですか?私はgcc 4.7.0を使用します。 – Elektito
@Homaymoon: GCCの '-M'フラグ(http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html#Preprocessor-Options)を参照してください。 –
ありがとうございます。少なくとも少し複雑なプロジェクトでは、少し使いにくいようです。私は通常、Makefileに入れて忘れるすべてのcflagsを与える必要があります。また、-MMを使用していても、$(pkg-config --cflags glib-2.0)をgcc行に追加する必要があったため、すべてのglibヘッダーが出力されます。 – Elektito
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
も含まれています。
あなたはコードがあなたの特定のルールセットで動作するようにいくつかの調整が必要になる場合があります、次のメイクファイルの断片
SOURCES := $(wildcard *.c)
DEPS := $(SOURCES:%.c=%.d)
CFLAGS += -MMD
-include $(DEPS)
を使用してgccでヘッダの依存関係を自動生成することができます。
今、良いアイデアがあります! – Elektito
- 1. IdentityServer3の暗黙的なフローではなく、暗黙的なjavascript
- 2. Makefile:暗黙的なルール出力を消す方法
- 3. DateTimeから暗黙的に暗黙的に暗黙的に暗黙的に暗黙的に暗黙的に暗黙的に暗黙変換に変換することができません
- 4. 暗黙的なdefフィールドを持つ特性を作成するときに暗黙的なdef関数
- 5. 暗黙的な変換と暗黙のクラス
- 6. 5つのルールと暗黙的に削除された関数
- 7. 暗黙的と明示的な.NETスレッディング
- 8. ASP.NET MVC - 暗黙的なフォーム操作
- 9. マルチGPUの暗黙的な作業
- 10. スカラ:暗黙的に暗黙のクラスに
- 11. 暗黙的に変換するときに暗黙のany2stringaddシンボル
- 12. 暗黙的なインターフェイスコール関数
- 13. mysqlクエリと暗黙的に
- 14. プライベート継承と暗黙的な変換
- 15. 暗黙的な変換とポインタ?
- 16. は、典型的なクラスと暗黙
- 17. 暗黙的に暗黙的に符号なしタイプに変換される
- 18. 暗黙的なパラメータ値自体は暗黙的な値ですか?
- 19. make:暗黙ルール、(tail-)再帰的に適用されますか?
- 20. は、暗黙的に
- 21. は、暗黙的に
- 22. 暗黙的対明示的なインタフェース
- 23. 暗黙的で明示的なキャスト
- 24. WPFで暗黙的なスクロールバーを操作する方法は?
- 25. Postgresの「暗黙的なシーケンス」と「暗黙的なインデックス」は何を意味しますか?
- 26. Scalaのシンプルな暗黙的な変換
- 27. Scalaの暗黙的な変換と暗黙的なパラメータの関係は何ですか?
- 28. 不可能な暗黙的な移動操作ですか?
- 29. 暗黙値と同じではない暗黙[機能2]
- 30. Makefileに私の暗黙のルールが表示されない
http://stackoverflow.com/a/9598716/412080 –
Ah!私はGoogleとStackOverflowを30分くらい検索して見つけられなかったと誓っています! – Elektito