我写了这个简单的makefile,它工作正常,直到我想做一些更改并将它们应用到二进制文件中。然后,我需要再次做'干净'和'做',因为obj。文件不会被重建。尽管到目前为止,它似乎是一个简单的任务,但我没有修改它以便制作obj。文件隐式重建(因此,当我修改源代码时,我只能写'make')。为什么这个简单的makefile不会在重建时重建源代码?
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修改建议(我想同自己之前,我写了这个问题),这是结果:
[email protected]: ~/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;
}[email protected]: ~/mypath$ make
g++-5.3 a.o -o a
[email protected]: ~/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:'这一行来读取'a.o:a.cpp'。还要改变目标'build',这取决于'a',而不是'a.o',并添加一个目标'a:a.o'来完成链接。 – Peter