gpt4 book ai didi

makefile - 在 Makefile 中一次运行所有目标

转载 作者:行者123 更新时间:2023-12-01 10:42:24 27 4
gpt4 key购买 nike

我有一个如下的 Makefile

all:
bison -d -v parser.y
flex -o parser.lex.c parser.lex
gcc -o cparser parser.lex.c parser.tab.c -lfl -lm
clean:
rm parser.tab.h parser.tab.c parser.output parser.lex.c

当我在终端中运行 make 时,它​​只运行目标 all .

我已经尝试通过添加
.PHONY:all clean.PHONY:clean即使它只运行 all .
我应该在 Makefile 中进行哪些更改才能运行所有目标?

系统配置:
Ubuntu 14.10
GNU 制作 4.0

最佳答案

您要运行 allclean当您输入 make 时?这通常没有用,因为这会清理您刚刚构建的内容(尽管在您的情况下,我看到您的 clean 目标实际上并没有这样做)。

要做到这一点,你需要类似的东西。

all: cparser clean

cparser:
bison -d -v parser.y
flex -o parser.lex.c parser.lex
gcc -o cparser parser.lex.c parser.tab.c -lfl -lm

clean:
rm parser.tab.h parser.tab.c parser.output parser.lex.c

尽管这仍然是一个相当糟糕的 makefile 并且没有利用 make 的任何好处。为您提供(例如,仅当先决条件发生变化时才智能地重建事物)。

我建议你可能想要更像这样的东西。
.PHONY: all
all: cparser

parser.lex: parser.y
bison -d -v parser.y

parser.lex.% parser.tab.%: parser.lex
flex -o parser.lex.c parser.lex

cparser: parser.lex.c parser.tab.c
gcc -o cparser parser.lex.c parser.tab.c -lfl -lm

.PHONY: clean
clean:
rm parser.tab.h parser.tab.c parser.output parser.lex.c cparser

假设我没记错 flex将生成 parser.lex.cparser.tab.c文件的同时。

还要注意先决条件是链接的,并且 clean现在也会清理二进制文件。你不需要运行 make clean让事情以这种方式正确重建。

关于makefile - 在 Makefile 中一次运行所有目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29173136/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com