始终重新连接

时间:2015-11-16 14:05:35

标签: makefile

我有一个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 ...

不确定如何避免重新连接 - 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您的目标的名称与其生成的文件的名称不同。 make look将文件的时间戳与目标(在您的情况下为exe_test)中的名称进行比较,并将其与先决条件的时间戳进行比较;如果文件不存在,则始终构建。

但是你的指令创建了一个名为test的文件,而不是exe_test,因此它永远不会找到exe_test并且总是重建。