我无法编写有效的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行在两个文件中保存不同的值。头文件的其余内容包括结构,枚举以及函数原型的声明。
我想实现的是什么?如果是的话,你能否告诉我我做错了什么?
感谢。
答案 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
。