makefile の機能をテストするための簡単なコード *make_test* を書きました。フォルダ構造は次のとおりです。
include フォルダーにはmaths.hが含まれます
float add(float a, float b) { return a+b; }
メインファイルには次のコードが含まれています。
# include <stdio.h> # include <include/maths.h> int main(int argc, char** argv) { float a=1; float b=4; printf("%f + %f = %f\n", a, b, add(a, b)); return 0; }
以下を含むメイクファイル:
IDIR = -I. DEPS = ./include/maths.h CC= gcc -Wall -g $(IDIR) program: make_test.o %.o: test/%.c $(DEPS) @echo "Rule 1 was called" $(CC) -o $@ $< %.o: test/%.c $(DEPS) @echo "Rule 2 was called" $(CC) -o $@ $< %.o: test/%.c $(DEPS) @echo "Rule 3 was called" $(CC) -o $@ $<
テストのために意図的に挿入された test/%.c ステートメントがあることに注意してください。テストフォルダはありません。メイン ファイルに変更を加え、コマンド ラインで make と入力すると、次のようになります。
gcc -Wall -g -I. -c -o make_test.o make_test.c
私の質問は、 -c フラグをどこにも追加していないのに、なぜ出力に表示されるのですか? 依存関係が存在しない (test/%.c) か変更されている (include/maths.h) ため、「何もする必要はありません」という出力があるべきではありませんか?
ありがとう、