首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在编译前回覆“编译”

在编译前回覆“编译”
EN

Stack Overflow用户
提问于 2019-11-26 19:05:49
回答 1查看 441关注 0票数 0

我认为这很容易,但实际上我无法在互联网上找到或找到这样一种解决方案,即在编译前为“对象文件的编译”(例如)做广告,同时避免重新链接。

我的makefile应该是这样的:

代码语言:javascript
复制
    libfrog.a: $(OBJS)
        @echo "building the library"
        ar -rc $@ $^
    %.o:%.c
        gcc -i. -c -o $@ $<

该产品在迅速“制造”时生产:

代码语言:javascript
复制
    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

但我想要:

代码语言:javascript
复制
    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文件,只是为了创建一个依赖于其存在的规则,但我也失败了。我不知道这是否可能?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-26 19:17:04

做起来可不简单。但是,如果您正在使用GNU,您可以在只订购的先决条件的帮助下完成它

代码语言:javascript
复制
%.o : %.c | announce
        gcc -I. -c -o $@ $<

.PHONY: announce
announce:
        echo "compilation of the objects files"

就我个人而言,我不认为显示这个消息是必要的,我甚至不会增加上述的复杂性来支持它在我的makefile。

但是,如果您真的想要这样做,并且不希望消息被打印出来,除非需要创建一些对象文件,那么您将不得不变得非常花哨,并执行如下操作:

代码语言:javascript
复制
PRINTED :=

%.o : %.c
        $(or $(PRINTED),$(eval PRINTED := :)echo "compilation of the objects files")
        gcc -I. -c -o $@ $<     

一旦开始工作,您将希望在第一个菜谱行之前添加一个@

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59057820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档