【发布时间】:2019-11-26 19:05:49
【问题描述】:
我认为这很容易,但我实际上无法弄清楚也无法在互联网上找到在编译之前宣传“对象文件的编译”(例如)的解决方案,并避免同时重新链接
我的 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 作为第一条规则的依赖项,它将在再次提示“make”时强制重新链接所有文件,即使只修改了一个文件libfrog.a: echo $(OBJS)(以及规则“echo”回显文本)...
所以我尝试为每个编译回显,但是将文本更改为不回显,我失败了...我尝试创建一个 echo.txt 文件只是为了创建一个取决于其存在的规则但我失败了也。不知道有没有可能?
【问题讨论】: