我有一个make文件如下 - 基于变量类型 - 我必须构建一个exe或lib - 以下make文件工作正常 - 但它始终链接,即使代码没有变化。
CC:=gcc
CFLAGS:= -fPIC -Wall
BIN_NAME := test
type :=exe
$(BIN_NAME): $(type)_${BIN_NAME}
file.o: file.c
@echo "Compiling ..."
$(CC) -c $(CFLAGS) -o $@ $<
lib_$(BIN_NAME): file.o
@echo "Creating Lib ..."
$(CC) -shared -o $(BIN_NAME).so file.o
exe_$(BIN_NAME): file.o
@echo "Linking ..."
$(CC) -o $(BIN_NAME) file.o
all: $(BIN_NAME)
.DEFAULT_GOAL := all
.PHONY: clean
clean:
rm -f *.o
make -d
结束了下面的内容
Prerequisite `file.c' is older than target `file.o'.
No need to remake target `file.o'.
Finished prerequisites of target file `exe_test'.
Must remake target `exe_test'.
Putting child 0x00b12e50 (exe_test) PID 33137 on the chain.
Live child 0x00b12e50 (exe_test) PID 33137
Linking ...
不确定如何避免重新连接 - 非常感谢任何帮助。
答案 0 :(得分:2)
您的目标的名称与其生成的文件的名称不同。 make look将文件的时间戳与目标(在您的情况下为exe_test)中的名称进行比较,并将其与先决条件的时间戳进行比较;如果文件不存在,则始终构建。
但是你的指令创建了一个名为test的文件,而不是exe_test,因此它永远不会找到exe_test并且总是重建。