Makefile模板之生成动态库

本文详细介绍了如何使用Makefile生成动态库,包括关键选项如-Wall、-fPIC、-fpermissive和-DDEBUG的解释,以及-I、-L和-l选项在链接阶段的作用。通过自定义变量如$@、$%、$<、$?、$^和$+,指导读者理解Makefile规则并生成libVisking.so动态链接库。
摘要由CSDN通过智能技术生成

选项说明:

-Wall 选项 :可以打印出编译时所有的错误或者警告信息。变量没有初始化,类型不匹配,没有使用的变量或者类型转换错误等警告提示。

-fPIC 选项:适用于动态连接,作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code), 则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意 位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。

-fpermissive选项:用这个选项,可以兼容一些老的语法,但是一些语法错误也会被忽略。该选项需慎重使用,因为会降低对于代码检查的严格性。

-DDEBUG :相当于定义了宏DEBUG,代码中可以用#ifdef DEBUG来控制调试输出信息等。可以用-D加名字定义一些用到的宏定义。

-I 选项:(i的大写)编译选项(准确的是说是预处理选项CFLAGS或者CPPFLAGS中指定),用来指定预处理时查找头文件的范围的。

-L选项 :链接选项(LDFLAGS中指定),用来告诉链接器到哪个路径下面去找动态链接库。
-l 选项: (L的小写)链接选项(LDFLAGS中指定),用来指定链接额外的库(譬如我们用到了uuid,就用-luuid,链接器就会去链接libuuid.so)
-shared :创建动态链接库使用的选项。

自定变量:

$@:表示规则中的目标文件集。在模式规则中,如果有多个目标,那么, $@ 就是匹配于目标中模式定义的集合。

$% :仅当目标是函数库文件时,表示规则中的目标成员名。例如,如果一个目标是 foo.a(bar.o),那么, $% 就是 bar.o , $@ 就是 foo.a 。如果目标不是函数库文件(Unix 下是 .a , Windows下是 .lib ),那么,其值为空

$< :依赖目标中的第一个目标名字。如果依赖目标是以模式(即 % )定义的,那么 $< 将是符合模式的一系列的文件集。注意,其是一个一个取出来的。

$? :所有比目标新的依赖目标的集合。以空格分隔。

$^ :所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。

$+ :所有依赖目标的集合,不去除重复的依赖目标。


# flags
CC		= gcc
CXX		= g++

CXXFLAGS = -Wall -fPIC -std=c++11 -fpermissive
LDFLAGS = -shared

# args
RELEASE = 0 #控制release还是debug版本 0代表debug版本 ,1代表release版本
BITS = 64  #64还是32位

# [args] 程序位数. 32
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值