我的makefile出了什么问题?

时间:2014-01-22 23:56:46

标签: c makefile

我无法编写有效的makefile。我已经阅读了以下教程(*),我发现我们可以编写简单的文件,例如:

program : program.cpp
    g++ -o program program.cpp -lm

(*)http://www.pma.caltech.edu/~physlab/make.html

我试图让这个例子符合我自己的需要,但它不起作用:

interpreter: gvr_v51.c gvr_v51_interpreter.h
   gcc gvr_v51_interpreter.h gvr_v51.c -pedantic -Wall -std=c99 -o gvr_v51 -lSDL

parser: gvr_v51_parser.h gvr_v51.c
    gcc gvr_v51_parser.h gvr_v51.c -pedantic -Wall -std=c99 -o gvr_v51 -lSDL

我需要实现的是通过键入“make interpreter”或“make parser”来允许用户编译。两者之间的区别在于第一个包含头文件gvr_v51_interpreter.h,而另一个包含头文件gvr_v51_parser.h

两个头文件都是相同的,只有一个#define行在两个文件中保存不同的值。头文件的其余内容包括结构,枚举以及函数原型的声明。

我想实现的是什么?如果是的话,你能否告诉我我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:1)

您不能通过将头文件附加到要编译的c文件列表来包含头文件。但是,您可以根据宏的定义包含标题,并使用gcc选项预定义它。

在gvr_v51.c中:

#ifdef INTERPRETER
#include "gvr_v51_interpreter.h"
#else
#include "gvr_v51_parser.h"
#endif

在Makefile中:

interpreter:
    gcc -lSDL -DINTERPRETER -o gvr_v51 gvr_v51.c

parser:
    gcc -lSDL -o gvr_v51 gvr_v51.c

答案 1 :(得分:1)

您可以有条件地包含头文件而无需更改源文件(gvr_v51.c):

interpreter: gvr_v51.c gvr_v51_interpreter.h
    gcc -include gvr_v51_interpreter.h gvr_v51.c -pedantic ...
parser: gvr_v51_parser.h gvr_v51.c
    gcc -include gvr_v51_parser.h gvr_v51.c -pedantic ...

一旦有效,有几种方法可以改善它。特别是,我建议你不要有两个构建gvr_v51的规则,它们都不是gvr_v51

相关问题