更改 makefile 以处理“make all”命令
Posted
技术标签:
【中文标题】更改 makefile 以处理“make all”命令【英文标题】:Change makefile to work on 'make all' command 【发布时间】:2020-04-15 19:15:36 【问题描述】:所以我已经完成了关于制作数独程序的学校项目,并且我有这个 makefile,当我使用“make”命令时它可以干净地工作。我刚刚发现我需要它在“make all”命令上干净地编译。我不知道如何设置它。有什么建议吗?
CC = gcc
OBJS = main.o MainAux.o game.o parser.o solver.o
EXEC = sudoku_console
COMP_FLAG = -ansi -Wall -Wextra -Werror -pedantic-errors
GUROBI_COMP = -I/usr/local/lib/gurobi563/include
GUROBI_LIB = -L/usr/local/lib/gurobi563/lib -lgurobi56
$(EXEC): $(OBJS)
$(CC) $(OBJS) $(GUROBI_LIB) -o $@ -lm
main.o: main.c game.h
$(CC) $(COMP_FLAG) -c $*.c
game.o: game.c MainAux.h parser.h solver.h game.h
$(CC) $(COMP_FLAG) -c $*.c
MainAux.o: MainAux.c game.h
$(CC) $(COMP_FLAG) -c $*.c
parser.o: parser.c MainAux.h
$(CC) $(COMP_FLAG) -c $*.c
solver.o: solver.c game.h MainAux.h
$(CC) $(COMP_FLAG) $(GUROBI_COMP) -c $*.c
clean:
rm -f $(OBJS) $(EXEC)
【问题讨论】:
【参考方案1】:只需创建一个名为all
的目标,这取决于您想要发生的任何事情。比如:
all: $(EXEC)
.PHONY: all
.PHONY
卫生良好,但不是严格要求。
现在,当您运行 make all
时,它会找到 all
目标,发现要更新它必须首先更新 $(EXEC)
目标,而 Bob 是您的叔叔!
【讨论】:
谢谢你,这行得通!但我有个问题。当我将第一个目标 $(EXEC): $(OBJS) 更改为 all: ($OBJS) 时,它似乎也可以工作(当然还有可执行的输出名称)。你的提议和这个提议的效果有什么不同吗? 如果您按照自己的方式进行操作并且连续两次运行make
而不更改任何文件,它仍然会在第二次(以及每隔一次)重新链接程序。如果你按照我的方式做,那么第二次(以及后续)它不会做任何事情,因为没有什么可做的。以上是关于更改 makefile 以处理“make all”命令的主要内容,如果未能解决你的问题,请参考以下文章
missing seperator error when [make all]