c++ - 为什么 GNU make 总是重新链接我的项目?

标签 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

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

我在装有 GNU Make 3.82 和 g++ 4.8.2 版的 i686 GNU/Linux 机器上。

最佳答案

Make 重新链接您的项目,因为它试图构建allall 的规则不会创建任何名为all 的文件。相反,它生成 myexe。下次你运行 make 时,它​​会看到没有 all,但是有一个构建规则运行使。

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

all: myexe
    echo Build done

myexe: <myexe dependencies go here>
    $(CXX) $(CFLAGS) -o myexe $(wildcard *.o) $(LDFLAGS)

关于c++ - 为什么 GNU make 总是重新链接我的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23371141/

相关文章:

c++ - 通过 const 获取参数并通过 const 返回的函数的生命周期延长

linux - 在 Ubuntu 12.04.1 下构建 cross-gcc 4.7.2

linux - 在 makefile 中使用 setenv

c++ - 在可执行文件中嵌入一串编译器选项 (Visual Studio)

c++ - 如何计算 Eigen VectorXi 中交集和并集的元素数量?

C++ 为什么在栈中构造完对象后立即调用析构函数?

c++ - 用 char* 增加数组 [C++]

c - 为什么 printf(char[]) 会生成警告,同时 printf ("asdf") 不会

c - Sublime Text在Windows中编译多个文件

c++ - 如何使用 Gnu make 编写库?