我以为这很容易,但是我实际上找不到并在互联网上找不到,例如在编译之前就广告“ 目标文件的编译”的解决方案,并避免在同一位置重新链接时间
我的makefile文件将是这样的:
libfrog.a: $(OBJS)
@echo "building the library"
ar -rc $@ $^
%.o:%.c
gcc -i. -c -o $@ $<
当提示“ make”时产生的:
gcc -I. -c -o file01.o file01.c
gcc -I. -c -o file02.o file02.c
gcc -I. -c -o file03.o file03.c
gcc -I. -c -o file04.o file04.c
gcc -I. -c -o file05.o file05.c
building library
ar -rc libfrog.a file01.o file02.o file03.o file04.o file05.o
但我想拥有:
compilation of the objects files
gcc -I. -c -o file01.o file01.c
gcc -I. -c -o file02.o file02.c
gcc -I. -c -o file03.o file03.c
gcc -I. -c -o file04.o file04.c
gcc -I. -c -o file05.o file05.c
building library
ar -rc libfrog.a file01.o file02.o file03.o file04.o file05.o
现在:
1-如果我在调用规则libfrog.a
之前放回声(例如,通过创建另一个第一个规则),即使我两次提示“ make”,也将不打印任何内容...
2-如果我在规则%.o:%.c
中添加回显,它将为每个文件打印
3-如果我将echo作为第一条规则的依赖项,即使仅修改了一个文件libfrog.a: echo $(OBJS)
(以及一条规则“ echo”,当再次修改“ make”时,它将强制重新链接所有文件)回显文本)...
因此,我尝试为每个编译回显,但是通过将文本更改为不回显,我失败了……我试图创建一个echo.txt文件只是为了创建一个取决于其存在的规则,但我也失败了。我不知道是否有可能?
这不是很简单。但是,如果您使用的是GNU make,则可以在order-only prerequisites的帮助下完成它:
%.o : %.c | announce
gcc -I. -c -o $@ $<
.PHONY: announce
announce:
echo "compilation of the objects files"