我寫了這個簡單的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