gpt4 book ai didi

header - 当头文件更改时 GNU-Make 不会重新编译

转载 作者:行者123 更新时间:2023-12-03 14:39:45 25 4
gpt4 key购买 nike

当 hdr.h 文件更改时,GNU-Make 不会重新编译。
如下打印的行,即使生成了 main.d 文件,它也没有尝试重新编译。
你能指导我为什么会这样吗?

hdr.h

#ifndef __HDR_H__  

#define LOOP_CNT 1000

#endif /* __HDR_H__ */

主文件
#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;
}

生成文件
SUFFIXES += .d

.PHONY: clean

OBJECTS = $(patsubst %.c,%.o,$(wildcard *.c))
CC = armcc
LD = armcc
CFLAGS +=

# Default target
all: sum

sum : $(OBJECTS)
$(CC) $(CFLAGS) -o $@ $^

$(OBJECTS) : %.o : %.c
$(CC) $(CFLAGS) -o $@ -c $<

# Generating dependency files
%.d : %.c
@$(CC) -M $< > $@

# 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

最佳答案

作为一个快速而肮脏的 Makefile 修复,如果头文件发生变化,我只是列出我所有的头文件,然后添加 $(HEADERS)作为从 C src 文件构建目标文件的部分中的依赖项。它的效率不高,但我发现它已经足够好了,即

HEADERS = \
my_header.h \
my_other_header.h

$(BUILD_DIR)/%.o: %.c $(HEADERS)
$(LINK.c) $< -c -o $@

关于header - 当头文件更改时 GNU-Make 不会重新编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44020890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com