最近在看一个linux下的C语言程序,但是里面的makefile看不懂啊,哪位大神能帮忙解释一下,不胜感激!
#!/bin/bashCC=g++CFLAGS=-ansi-O5-WallLDFLAGS=-ansi-lm-WallEXEC=communityconverthierar...
#!/bin/bash
CC=g++
CFLAGS= -ansi -O5 -Wall
LDFLAGS= -ansi -lm -Wall
EXEC=community convert hierarchy
OBJ1= graph_binary.o community.o
OBJ2= graph.o
all: $(EXEC)
community : $(OBJ1) main_community.o
$(CC) -o $@ $^ $(LDFLAGS)
convert : $(OBJ2) main_convert.o
$(CC) -o $@ $^ $(LDFLAGS)
hierarchy : main_hierarchy.o
$(CC) -o $@ $^ $(LDFLAGS)
##########################################
# Generic rules
##########################################
%.o: %.cpp %.h
$(CC) -o $@ -c $< $(CFLAGS)
%.o: %.cpp
$(CC) -o $@ -c $< $(CFLAGS)
clean:
rm -f *.o *~ $(EXEC) 展开
CC=g++
CFLAGS= -ansi -O5 -Wall
LDFLAGS= -ansi -lm -Wall
EXEC=community convert hierarchy
OBJ1= graph_binary.o community.o
OBJ2= graph.o
all: $(EXEC)
community : $(OBJ1) main_community.o
$(CC) -o $@ $^ $(LDFLAGS)
convert : $(OBJ2) main_convert.o
$(CC) -o $@ $^ $(LDFLAGS)
hierarchy : main_hierarchy.o
$(CC) -o $@ $^ $(LDFLAGS)
##########################################
# Generic rules
##########################################
%.o: %.cpp %.h
$(CC) -o $@ -c $< $(CFLAGS)
%.o: %.cpp
$(CC) -o $@ -c $< $(CFLAGS)
clean:
rm -f *.o *~ $(EXEC) 展开
展开全部
听本尊细细道来:
CC=g++
// 指定编译器为g++编译器
CFLAGS= -ansi -O5 -Wall
//编译器编译时的编译参数,-ansi 是指按照ANSI C标准.-O5 是优化程度,-Wall 是开启警告
LDFLAGS= -ansi -lm -Wall
//编译器链接多个目标时的链接参数,-lm 就是动态链接math.h 这个函数库。其他同上。
EXEC=community convert hierarchy
//生成的可执行文件明
OBJ1= graph_binary.o community.o
//目标1 的.o 文件
OBJ2= graph.o
//目标2的.o文件
all: $(EXEC)
//Makefile的制作目标:就是EXEC里面的文件
community : $(OBJ1) main_community.o
//生成community 所依赖的的.o 文件, : 代表依赖关系
$(CC) -o $@ $^ $(LDFLAGS)
// -o 是生成文件的重命名, $@ 就是目标名字,即community.
//$^就是所有的依赖文件,即$(OBJ1)和main_community.o
//$(LDLAGS)就是参加链接的参数
//意思就是连接目标文件$(OBJ1) 和main_community.o 生成的文件命名为community
convert : $(OBJ2) main_convert.o
$(CC) -o $@ $^ $(LDFLAGS)
//这个同上, 最后生成了convert
hierarchy : main_hierarchy.o
$(CC) -o $@ $^ $(LDFLAGS)
//同上,生成了 hierarchy
##########################################
# Generic rules
##########################################
%.o: %.cpp %.h
//意思就是生成的 .o 文件依赖 .cpp 文件和 .h 文件
//%.o就是匹配.o结尾的文件
$(CC) -o $@ -c $< $(CFLAGS)
//-o 意思同上.
//$< 是指所有依赖文件中的第一个文件
//-c 是只编译不连接的意思, 再加上$(CFLAGS)编译参数
%.o: %.cpp
$(CC) -o $@ -c $< $(CFLAGS)
//同上.
//看到现在明白了把, 这些 .o 文件从来哪里来的, 最后要生成什么.
clean:
rm -f *.o *~ $(EXEC)
// 这个非常简单了, 就是执行make clean 时候要删除的文件.
怎么样,说得够明白了吧.
CC=g++
// 指定编译器为g++编译器
CFLAGS= -ansi -O5 -Wall
//编译器编译时的编译参数,-ansi 是指按照ANSI C标准.-O5 是优化程度,-Wall 是开启警告
LDFLAGS= -ansi -lm -Wall
//编译器链接多个目标时的链接参数,-lm 就是动态链接math.h 这个函数库。其他同上。
EXEC=community convert hierarchy
//生成的可执行文件明
OBJ1= graph_binary.o community.o
//目标1 的.o 文件
OBJ2= graph.o
//目标2的.o文件
all: $(EXEC)
//Makefile的制作目标:就是EXEC里面的文件
community : $(OBJ1) main_community.o
//生成community 所依赖的的.o 文件, : 代表依赖关系
$(CC) -o $@ $^ $(LDFLAGS)
// -o 是生成文件的重命名, $@ 就是目标名字,即community.
//$^就是所有的依赖文件,即$(OBJ1)和main_community.o
//$(LDLAGS)就是参加链接的参数
//意思就是连接目标文件$(OBJ1) 和main_community.o 生成的文件命名为community
convert : $(OBJ2) main_convert.o
$(CC) -o $@ $^ $(LDFLAGS)
//这个同上, 最后生成了convert
hierarchy : main_hierarchy.o
$(CC) -o $@ $^ $(LDFLAGS)
//同上,生成了 hierarchy
##########################################
# Generic rules
##########################################
%.o: %.cpp %.h
//意思就是生成的 .o 文件依赖 .cpp 文件和 .h 文件
//%.o就是匹配.o结尾的文件
$(CC) -o $@ -c $< $(CFLAGS)
//-o 意思同上.
//$< 是指所有依赖文件中的第一个文件
//-c 是只编译不连接的意思, 再加上$(CFLAGS)编译参数
%.o: %.cpp
$(CC) -o $@ -c $< $(CFLAGS)
//同上.
//看到现在明白了把, 这些 .o 文件从来哪里来的, 最后要生成什么.
clean:
rm -f *.o *~ $(EXEC)
// 这个非常简单了, 就是执行make clean 时候要删除的文件.
怎么样,说得够明白了吧.
2012-09-27
展开全部
info make,看完就懂了。
$@是冒号左边的 $^是冒号右边的全部 $<是冒号右边的第一个
%.o匹配所有.o结尾的文件
CFLAGS是默认参数,Generic rules编译时会自动加上这个参数。
$@是冒号左边的 $^是冒号右边的全部 $<是冒号右边的第一个
%.o匹配所有.o结尾的文件
CFLAGS是默认参数,Generic rules编译时会自动加上这个参数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询