我写了这个简单的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/