我写了这个简单的makefile,在我想做一些更改并将它们应用到二进制文件之前,它可以正常工作。然后,由于obj,我需要再次执行“make clean”和“make”。文件将不会重建。虽然到目前为止,这似乎是一个简单的任务,但我未能对其进行修改以使其成为obj。文件隐式重建(因此,在修改源代码时,我只能写“make”)。

COMPILER=g++-5.3
CXXFLAGS=-std=c++11 -O2 -pedantic

build : a.o
     $(COMPILER) a.o -o a

a.o:
     $(COMPILER) $(CXXFLAGS) -c a.cpp -o a.o

clean :
    rm -f *.o *~ a

编辑:我尝试了Omada建议的更改(在写此问题之前,我自己尝试了相同的方法),结果是:
me@pc: ~/mypath$ cat a.cpp
#include <iostream>
int main(int argc, char* argv[])
{
    if ( argc!=2 ){
        std::ceaaarr<<"Prrogram expects 1 argument\n";
        return 1;
    }
    return 0;
}me@pc: ~/mypath$ make
g++-5.3 a.o -o a
me@pc: ~/mypath$ cat Makefile
#init

COMPILER=g++-5.3
CXXFLAGS=-std=c++11 -O2 -pedantic

build: a.o
        $(COMPILER) a.o -o a

a.o: a.cpp
        $(COMPILER) $(CXXFLAGS) -c a.cpp -o a.o

clean:
        rm -f *.o *~ a

最佳答案

只是改变这个

a.o:
    $(COMPILER) $(CXXFLAGS) -c a.cpp -o a.o

对此
a.o: a.cpp
    $(COMPILER) $(CXXFLAGS) -c a.cpp -o a.o

由于您从未告诉过makefile a.o取决于a.cpp,因此无法确定a.cpp更改时应重建a.o

让我知道它是否不起作用,我的makefile文件有点生疏。

关于c++ - 为什么这个简单的makefile不能在更改时重建源代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40566444/

10-13 08:07