C makefile未分别使用.h文件更新.o文件
我有以下文件:-C makefile未分别使用.h文件更新.o文件,c,makefile,C,Makefile,我有以下文件:- VER = Debug CC = gcc objectfiles = Getstr.o ui.o ustreqsol.o main.o pkg = `pkg-config --cflags --libs gtk+-3.0` obj = $(addprefix objs/,$(objectfiles)) ../$(VER)/Calculator: $(obj) $(CC) -o $@ $(obj) $(pkg) ./objs/ui.o:ui.c $(CC)
VER = Debug
CC = gcc
objectfiles = Getstr.o ui.o ustreqsol.o main.o
pkg = `pkg-config --cflags --libs gtk+-3.0`
obj = $(addprefix objs/,$(objectfiles))
../$(VER)/Calculator: $(obj)
$(CC) -o $@ $(obj) $(pkg)
./objs/ui.o:ui.c
$(CC) -c -o $@ $< $(pkg)
./objs/main.o:main.c
$(CC) -c -o $@ $< $(pkg)
./objs/%.o: %.c %.h
$(CC) -c -o $@ $<
clean:
-rm ../$(VER)/Calculator
-rm /objs/*
objs是目录。当我更改ustreqsol.h文件时,它编译ustreqsol.c文件,但不编译ui.h文件的case
$ touch ustreqsol.h
$ make
gcc -c -o objs/ustreqsol.o ustreqsol.c
gcc -o ../Debug/Calculator objs/Getstr.o objs/ui.o objs/ustreqsol.o objs/main.o `pkg-config --cflags --libs gtk+-3.0`
$ make
make: '../Debug/Calculator' is up to date.
$ touch ui.h
$ make
make: '../Debug/Calculator' is up to date.
作为makefiles中的noob,我不知道为什么会发生这种情况ui.c没有被重建的原因是因为您明确地说ui.h不是依赖项:
./objs/ui.o:ui.c
$(CC) -c -o $@ $< $(pkg)
/objs/%.o:%.c%.h
-这表示“如果x.c
或x.h
已经更改,则重建x.o
”。@OliverCharlesworth但当我更改ui.h时,它应该重建ui.o,但这不是完美的答案。请注意,ui.o
规则可能是无用的,在ustreqsol.o
规则中,您可能只有ui.h
先决条件。
./objs/ui.o:ui.c
$(CC) -c -o $@ $< $(pkg)
./objs/%.o: %.c %.h
$(CC) -c -o $@ $<
./objs/ustreqsol.o: ustreqsol.c ustreqsol.h ui.h
./objs/ui.o: ui.c ui.h
./objs/main.o: main.c ui.h ustreqsol.h
./objs/Getstr.o: Getstr.c
./objs/%.o: %.c %.h
$(CC) -c -o $@ $<