hdr.hファイルが変更されたときにGNU-Makeは再コンパイルされません。 以下のように、main.dファイルが生成されても再コンパイルを試みませんでした。 なぜそれが起こったのか教えてくれますか?ヘッダファイルが変更されたときにGNU-Makeが再コンパイルされない
hdr.h
#ifndef __HDR_H__
#define LOOP_CNT 1000
#endif /* __HDR_H__ */
main.cの
#include <stdio.h>
#include "hdr.h"
int main(void)
{
int i, sum = 0;
for (i = 0; i < LOOP_CNT; i++) sum += i;
(void)printf("sum = %d\n", sum);
return 0;
}
のMakefileここ
SUFFIXES += .d
.PHONY: clean
OBJECTS = $(patsubst %.c,%.o,$(wildcard *.c))
CC = armcc
LD = armcc
CFLAGS +=
# Default target
all: sum
sum : $(OBJECTS)
$(CC) $(CFLAGS) -o [email protected] $^
$(OBJECTS) : %.o : %.c
$(CC) $(CFLAGS) -o [email protected] -c $<
# Generating dependency files
%.d : %.c
@$(CC) -M $< > [email protected]
# Include dependency file to have gcc recompile necessary sources
include $(patsubst %.c,%.d,$(wildcard *.c))
#$(info $(patsubst %.c,%.d,$(wildcard *.c)))
clean:
rm -f *.o *.d core $(EXEC_NAME)
は、第二の線が印刷されています。
C:\project\dep>make all
Makefile:24: main.d: No such file or directory
armcc -o main.o -c main.c
armcc -o sum main.o
C:\project\dep>make all
make: Nothing to be done for `all'.
main.dファイルは以下のように生成されます。
__image.axf: main.c
__image.axf: C:\Program Files\ARM\RVCT\Data\4.1\713\include\windows\stdio.h
__image.axf: hdr.h
依存関係( '.d')ファイルに依存しないので、決して生成されません。 –
関連のない注記では、アンダースコアで始まり大文字の文字または*別のアンダースコア*で始まるシンボルはすべてのスコープで予約されています。このようなシンボルを使用しないでください。たとえば、ヘッダーインクルードガードマクロに使用してください。そのようなマクロを実際に定義しているわけではありません... –
あなたの生成した 'main.d'は何を含んでいますか? –