您的位置:首页 > 其它

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

2012-03-10 14:52 260 查看
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 执行文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: