一个字母引发的编译血案

来源:互联网 发布:男同事对你有好感知乎 编辑:程序博客网 时间:2024/04/30 15:06

我的环境是Linux操作系统。

在当前目录下有这样几个源文件:

// dou.hint dou(int _data);

// dou.cpp#ifdef DOU#include <dou.h>int dou(int _data){    return 2*_data;}#else#include <Window.h>#endif

// main.cpp#include <stdio.h>#include <dou.h>int main(){    printf("dou(3):%d\n", dou(3));}

Makefile文件是这样的:

DEFINE=-DDOUall: main.o dou.o    g++ -o exe main.o dou.omain.o: main.cpp dou.h    g++ -c main.cppbou.o: dou.cpp dou.h    g++ -c dou.cpp ${DEFINE}clean:    rm *.o exe

编译结果:

$ makeg++ -c main.cppg++    -c -o dou.o dou.cppdou.cpp:12:20: error: Window.h: No such file or directorymake: *** [dou.o] Error 1

我感觉很奇怪:命名我有定义dou.o的生成规则:

g++ -c dou.cpp ${DEFINE}
为什么还是会自动生成bou.o的生成规则呢:

g++    -c -o dou.o dou.cpp

最后在我反反复复看几遍代码之后发现,在Makefile的第8行有一个字母写错啦:

bou.o: dou.cpp dou.h 应该是 dou.o: dou.cpp dou.h

我花了很长一段时间才找出这个问题,很是汗颜~~
希望能以此为戒。