我有3个文件,我想为它们制作一个makefile。
文件是:
polyHeader.c
(这是包含所有函数定义的文件)
polyHeader.h
(这是包含所有函数声明/原型的头文件)
polyTest.c
(这是包含主要功能的文件)
我创建了以下makefile :
polyTest: polyTest.c polyHeader.o
gcc -Wall -o polyTest polyTest.c
polyHeader.o: polyHeader.c
gcc -Wall -o polyHeader polyHeader.c
注意:我不确定我是否也应该处理makefile中的头文件(polyHeader.h),或者甚至需要编译它(即链接器是否只能找到它并链接无论如何 - 我已经使用#include "polyHeader.h"
)
无论如何,当我为上面显示的makefile运行make命令时,我收到以下错误:
Makefile:2: *** missing seperator. Stop.
有人可以告诉我如何解决这个问题吗?
答案 0 :(得分:1)
polyTest: polyTest.c polyHeader.o
此行表示polyTest取决于polyTest.c和polyHearder.o。 但是在这个gcc系列中,我没有看到依赖。
gcc -Wall -o polyTest polyTest.c
这个gcc行应该以Tab而不是空格开头。
答案 1 :(得分:0)
这个makefile似乎缺少某些元素,我 建议阅读http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/ 有关简单makefile内容的详细信息
我建议写得更像这样:
// indicate certain targets will never be created
.PHONY: all clean
// get list of source files (wildcard would be an even better method)
SRCS = polyHeader.c polyTest.c
// convert list of source files to list of obj files
OBJS = $(SRCS:.c=.o)
CC=gcc
CFLAGS= -Wall -c -I.
DEPS = polyHeader.h
// first/default target when not listed on command
all: poly ${OBJS}
// link objects to make 'poly' executable
poly: ${OBJS}
$(CC) $(LFLAGS) -o poly $(OBJS)
// compile each source file into a object file
%.o: %.c $(DEPS)
$(CC) $(CFLAGS) -o $@ $<
// target for removing debris from current directory
clean:
rm -f *.o
rm -f poly