我寫了下面的Makefile:並不意味着必須更新可執行
CC=g++
all: happy
happy: happy.o HappyLetter.o
$(CC) -o happy happy.o HappyLetter.o
happy.o: happy.cpp
$(CC) -c happy.cpp
HappyLetter.o: HappyLetter.cpp
$(CC) -c HappyLetter.cpp
clean:
rm -rf *.o happy
,並正與文件HappyLetter.cpp和happy.cpp(包括原)合作,創建一個名爲幸福的可執行文件。
我可以使用make成功構建代碼。但是,當我修改HappyLetter.cpp並再次鍵入「make」時,更改不會反映出來。只有當我輸入'make clean'然後'make'時它才起作用。我希望發生的目標文件的更新回顯到命令行:
$ make
g++ -c HappyLetter.cpp
g++ -o happy happy.o HappyLetter.o
但是,更新到HappyLetter.cpp沒有反映在快樂。
該問題不適用於其他方向。也就是說,如果我修改了happy.cpp,那麼在我鍵入'make'後立即反映更改。
我已經在我的Mac OS X上以及在Ubuntu機器上用三個make二進制文件複製了這個問題。所以我必須在編碼方面做錯了什麼。這裏是文件,這些文件在同一目錄下生成文件的文本:
happy.cpp
#include "HappyLetter.cpp"
int main()
{
printf("Hello from happy.cpp!\n");
HappyLetter *myObj = new HappyLetter();
myObj->speak();
return 0;
}
HappyLetter.cpp
#include <cstdio>
class HappyLetter {
public:
void speak()
{
printf("Hello from HappyLetter.cpp!\n");
}
};
我相信這個問題是簡單的東西,但我對於要檢查的內容沒有更多的想法。我有一個假設,規則和依賴關係的排序並不重要。
使用[重拍](http://bashdb.sourceforge.net/remake/)'-x'或'讓 - -trace';還可以像[這裏](http://stackoverflow.com/a/20146082/841108)一樣改進你的'Makefile';在重新運行'make'之前嘗試'觸摸HappyLetter.cpp'' – 2015-01-26 20:21:48
在'happy.cpp'附近開始時,你不應該*'#include「HappyLetter.cpp」';你應該有一個'happy.h'頭文件,在'HappyLetter.cpp'和'happy.cpp'中都有'#include「happy.h」'並且修改你的'Makefile' – 2015-01-26 20:27:14