我写了下面的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