为什么GNU总是重新链接我的项目?

Hin*_*ton 5 c++ gcc makefile g++

我在一个充满.cpp.h文件的目录中有以下Makefile :

CFLAGS=-g -std=c++0x -Wall -pedantic -Wextra -D __STDC_LIMIT_MACROS -D __STDC_FORMAT_MACROS -O0
CXX=g++
LDFLAGS=-lgmp -lmathsat -lz3

all: Foo.o Bar.o
        $(CXX) $(CFLAGS) -o myexe Foo.o Bar.o $(LDFLAGS)

depend: .depend

.depend: $(wildcard *.cpp)
        rm -f ./.depend
        $(CXX) $(CFLAGS) -MM $^ > ./.depend

include .depend

%.o: %.cpp
        $(CXX) $(CFLAGS) $(INCLUDE) $< -c

clean:
        rm -f *.o myexe
Run Code Online (Sandbox Code Playgroud)

当我点击时make,它总是执行最后一步(链接),即使没有任何.o文件发生变化.我怎么能阻止make这样做呢?我期望make输出Everything up-to-date或类似的东西.

我在使用GNU Make 3.82和g ++版本4.8.2的i686 GNU/Linux机器上.

Art*_*emB 5

重新链接您的项目,因为它试图构建all.规则all不会创建任何名为的文件all.相反,它产生myexe.下次运行make时,它会看到没有all,但是有一个规则来构建一个,所以它尽职尽责地执行myexe每次运行make时都会链接的规则.

为了解决您的问题,您需要将makefile更改为大致如下所示:

all: myexe
    echo Build done

myexe: <myexe dependencies go here>
    $(CXX) $(CFLAGS) -o myexe $(wildcard *.o) $(LDFLAGS)
Run Code Online (Sandbox Code Playgroud)