当前位置: 技术问答>linux和unix
只有一行代码的Makefile文件,在执行make命令时出错。请帮忙看看 ,谢谢
来源: 互联网 发布时间:2015-12-08
本文导语: makefile与hello.c在同一路径下,单独使用 gcc -o hello.o hello.c 编译成功。 使用make命令编译时出错:makefile:2:*** missing separator stop. makefile文件只有一行代码“gcc -o hello.o hello.c ”。请问该怎么修改才能使用make命令...
makefile与hello.c在同一路径下,单独使用 gcc -o hello.o hello.c 编译成功。
使用make命令编译时出错:makefile:2:*** missing separator stop.
makefile文件只有一行代码“gcc -o hello.o hello.c ”。请问该怎么修改才能使用make命令编译成功呢?谢谢
使用make命令编译时出错:makefile:2:*** missing separator stop.
makefile文件只有一行代码“gcc -o hello.o hello.c ”。请问该怎么修改才能使用make命令编译成功呢?谢谢
|
很简单的,Makefile 就一行就可以
hello:
因为make足够聪明,它会自动把所有hello.c/hello.cpp/hello.o作为输入,并调用正确的编译器/连接器,这叫做隐含规则
如果写多一点,但不通用,像这样
hello:hello.c
$(CC) hello.c -o hello #键必须
如果写完整一点,稍微有点功能,支持大一点的项目 像这样
CC=gcc
LD=ld
CFLAGS=-g -Wall #你想编译调试版(有调试符号),显示所有警告
LDFLAGS=-lc -lm #你链接c函数库,数学函数库
srcfiles:= $(wildcard *.c) #生成当前目录c源文件列表,用空格分隔
header:=$(wildcard *.h) #生成生成当前目录h头文件列表,用空格分隔
objects:= $(patsubst %.c,%.o,$(srcfiles)) #从源文件列表生成目标文件列表(通过替换扩展名)
$(objects):$(header)
$(CC) -c $(srcfiles) # 键必须 ,仅仅编译目标文件
hello:$(objects)
$(CC) -c $(objects) # 键必须 ,仅仅连接产生输出文件
all:hello $(objects)
$(CC) -c $(objects) # 键必须 ,做所有的事情
clean:
rm -rc $(objects) hello
hello:
因为make足够聪明,它会自动把所有hello.c/hello.cpp/hello.o作为输入,并调用正确的编译器/连接器,这叫做隐含规则
如果写多一点,但不通用,像这样
hello:hello.c
$(CC) hello.c -o hello #键必须
如果写完整一点,稍微有点功能,支持大一点的项目 像这样
CC=gcc
LD=ld
CFLAGS=-g -Wall #你想编译调试版(有调试符号),显示所有警告
LDFLAGS=-lc -lm #你链接c函数库,数学函数库
srcfiles:= $(wildcard *.c) #生成当前目录c源文件列表,用空格分隔
header:=$(wildcard *.h) #生成生成当前目录h头文件列表,用空格分隔
objects:= $(patsubst %.c,%.o,$(srcfiles)) #从源文件列表生成目标文件列表(通过替换扩展名)
$(objects):$(header)
$(CC) -c $(srcfiles) # 键必须 ,仅仅编译目标文件
hello:$(objects)
$(CC) -c $(objects) # 键必须 ,仅仅连接产生输出文件
all:hello $(objects)
$(CC) -c $(objects) # 键必须 ,做所有的事情
clean:
rm -rc $(objects) hello
|
命令之前要加tab
|
在gcc -o hello.o hello.c 前应该有个"tab"键
|
all:
gcc -o hello.o hello.c
是指按一下TAB键,如果tabstop=4就相当于4个空格,如果tabstop=8相当于8个空格.
gcc -o hello.o hello.c
是指按一下TAB键,如果tabstop=4就相当于4个空格,如果tabstop=8相当于8个空格.