我认为这很容易,但实际上我无法在互联网上找到或找到这样一种解决方案,即在编译前为“对象文件的编译”(例如)做广告,同时避免重新链接。
我的makefile应该是这样的:
libfrog.a: $(OBJS)
@echo "building the library"
ar -rc $@ $^
%.o:%.c
gcc -i. -c -o $@ $<该产品在迅速“制造”时生产:
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-如果我将回显作为第一条规则的依赖项,它将强制在提示"make“时重新链接所有文件,即使只有一个文件被修改了libfrog.a: echo $(OBJS) (还有一个回显文本的规则" echo”).
所以我试着对每一个编译都回显,但是如果把文本更改为没有回显,我就失败了.我试图创建一个echo.txt文件,只是为了创建一个依赖于其存在的规则,但我也失败了。我不知道这是否可能?
发布于 2019-11-26 19:17:04
做起来可不简单。但是,如果您正在使用GNU,您可以在只订购的先决条件的帮助下完成它
%.o : %.c | announce
gcc -I. -c -o $@ $<
.PHONY: announce
announce:
echo "compilation of the objects files"就我个人而言,我不认为显示这个消息是必要的,我甚至不会增加上述的复杂性来支持它在我的makefile。
但是,如果您真的想要这样做,并且不希望消息被打印出来,除非需要创建一些对象文件,那么您将不得不变得非常花哨,并执行如下操作:
PRINTED :=
%.o : %.c
$(or $(PRINTED),$(eval PRINTED := :)echo "compilation of the objects files")
gcc -I. -c -o $@ $< 一旦开始工作,您将希望在第一个菜谱行之前添加一个@。
https://stackoverflow.com/questions/59057820
复制相似问题