我编写了这个简单的 makefile,它工作得很好,直到我想做一些更改并将它们应用到二进制文件中。然后我需要再次执行“make clean”和“make”,因为 obj. 文件将不会被重建。虽然到目前为止这似乎是一个简单的任务,但我未能修改它以制作 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
Run Code Online (Sandbox Code Playgroud)
编辑:我尝试了 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
Run Code Online (Sandbox Code Playgroud)
小智 5
由于您从未告诉 makefilea.o依赖于a.cpp,因此它将无法确定当a.cpp更改时,它应该重建a.o。
修复此更改
a.o:
$(COMPILER) $(CXXFLAGS) -c a.cpp -o a.o
Run Code Online (Sandbox Code Playgroud)
对此
a.o: a.cpp
$(COMPILER) $(CXXFLAGS) -c a.cpp -o a.o
Run Code Online (Sandbox Code Playgroud)
如果它不起作用请告诉我,我的 makefile 有点生疏了。