现在的位置: 首页 > 综合 > 正文

12-3-10关于gcc一些知识,如何编写makefile

2018年01月10日 ⁄ 综合 ⁄ 共 1098字 ⁄ 字号 评论关闭

1,phtread库不是inux默认的系统库,因此源码中编写pthread_create(),pthread_atfork(),在编译的时候都不需要人为的进行连接该库

 gcc -o thread thread.c -lpthread  

这里类似利用math.h中的pow函数一样,需要我们-lm

2,关于linux中利用c连接mysql数据库,

头文件需要包含#include"/usr/inlcude/mysql/mysql.h"

先编译:gcc -c main.c  (生成目标文件)

在最后进行连接的时候gcc main.o -o main -L/usr/lib/mysql -lmysqlclient  ( -L 指定libmysql.a,libmysql.so的库路径      -l表示链接这两个库)

ped: 如果需要Makefile中导入其他Makefile,可以include XXX,这里的XXX一般我们最好填写绝对路径。如果这里要同时引入几个,它们之间要用空格分开

否则,make命令进行执行的时候,会在当前目录寻找,而后会在make -I 路径   这个我们执行的路径中寻找。 

如果想要include就算找不到路径也继续执行,不妨在include 前面添加-

3看一makefile例子

CC = gcc
TARGET = Server
RM = rm -f
OBJS =  strategy.o thread.o Server.o
LIB_PATH = -lpthread -L/usr/lib/mysql/libmysql -lmysqlclient
CFLAGS = -I/usr/include/mysql -g 
$(TARGET):$(OBJS)
$(CC) -o $(TARGET) $(OBJS) $(LIB_PATH) 
$(OBJS):%.o:%.c
$(CC) -c $(CFLAGS) $< -o $@ 
clean:
-$(RM) $(TARGET) $(OBJS)

分析下相关语句: $(OBJS):%.o:%.c  此句表示将$(OBJS)中的.o的后缀文本替换为.c的后缀,即成为strategy.c thread.c Server.c

$<  表示依赖项的结果,即表示$(OBJS):%.o:%.c 执行完后的结果,等价为strateg.c thread.c Server.c

$@表示$(OBJS)     

-$(RM) $(TARGET) $(OBJS) 前面必须为tab,-表示即使执行出现错误也要继续执行下去

关于makefile文本的制作,是自顶向下的顺序制作的。先是连用-o 连接各大目标文件,库文件  

下面才开始进行-c -g进行源文件的编译 调式选项。此为编译阶段

        最后的clean: 表示清空.o 执行文件。

抱歉!评论已关闭.