Makefile编译两次

时间:2016-08-17 08:55:35

标签: makefile

我在main.cpp上使用此makefile运行make,它什么都不做。

CXX = g++
CXXFLAGS = -g -std=c++11 -stdlib=libc++ -Wall

SRCDIR = .
TARGET = tfm

SRCS = $(SRCDIR)/main.cpp
OBJS = $(SRCS:.cpp=.o)

all: $(TARGET)
$(TARGET): $(OBJS)
    $(CXX) $(CXXFLAGS) -o $@ $^

clean:
    $(RM) $(TARGET) $(OBJS)

并且,编译完成了两次。

g++ -g -std=c++11 -stdlib=libc++ -Wall   -c -o main.o main.cpp
g++ -g -std=c++11 -stdlib=libc++ -Wall -o tfm main.o

为什么会这样?

2 个答案:

答案 0 :(得分:2)

  

并且,编译完成了两次。

不,不是。第一行显示main.cppmain.o的汇编(由内置make规则触发,如何将*.cpp转换为*.o)。 第二个显示链接步骤,将main.o与库链接以生成可执行文件tfm

换句话说,一切都是美丽的。

答案 1 :(得分:0)

在源代码上运行make没有多大意义。你必须告诉make你想要生成什么。并且您不想生成源。

没有两次进行压缩。第一行编译第二行链接。