Linux——makefile编写

makefile中:
= 是最基本的赋值
:= 是覆盖之前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值
https://www.cnblogs.com/wanqieddy/archive/2011/09/21/2184257.html
$(MAKE) -I 头文件路径 -C 跳转目录 M=返回目录
$@ 目标文件,$^ 所有的依赖文件,$< 第一个依赖文件。
$% 仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标是"foo.a (bar.o)",那么,"$%"就是"bar.o","$@"就是"foo.a"。如果目标不是函数库文件(Unix下是[.a],Windows下是 [.lib]),那么,其值为空。
$? 所有比目标新的依赖目标的集合。以空格分隔。
$+ 这个变量很像"$^",也是所有依赖目标的集合。只是它不去除重复的依赖目标。
-o选项表示我们要求输出的可执行文件名。 -c选项表示我们只要求编译器输出目标代码,而不必要输出可执行文件。 -g选项表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息。
-D表示定义宏,结合源文件中结构
#ifndef 宏
...
#else
...
#endif
改变编译条件

$(CC) $(CFLAG) CFLAG 包含了一些编译参数,编译选项 比如-g -Wall
(-g 表示生成带调试信息的二进制文件,-Wall:选项可以打印出编译时所有的错误或者警告信息)
-O0: 表示编译时没有优化。
-O1: 表示编译时使用默认优化。
-O2: 表示编译时使用二级优化。
-O3: 表示编译时使用最高级优化。
-Os:相当于-O2.5优化,但又不所见代码尺寸
常用宏CFLAG(编译选项=-c -Wall等)LIBS (库=-lulfius -lyder -lorcania -lmicrohttpd -ljansson -L$(LDFLAGS))在链接.o文件后加上

在编译一些第三方库时,常见到的宏:
./configure --help 查看所有的可以配置的宏
--prefix=/root/dirname/(通常这个是表明插入库的路径,默认的通常是usr/local,然后可执行程序会install到 usr/local/bin,
库 usr/local/lib,头文件 usr/local/include)

/usr/lib /usr/include /usr/bin 是用户默认查找库、头文件、可执行程序路径
/usr/local/lib /usr/local/include /usr/local/bin 是用户自己编译库什么的默认安装呢路径


autoconf会根据configure.in 生成configure
automake会根据makefile.in 生成makefile

Makefile 编写:
1. 确定平台 指定编译工具链
ARCH=arm
CROSS_COMPILE=arm-none-linux-gnueabi-
CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ (或者CC=$(CROSS_COMPILE)gcc)
2. 设置一些宏
ADDITIONALFLAGS=-I../dirname( 或者 LIB_INCLUDE=-I../dirname)
LIBS=-lXX -L
CFLAGS=-c -Wall $(ADDITIONALFLAGS)

3. 设置目标,依赖,执行的命令
Destination: Dependence
$(CC) $(CFLAGS) $@ $^
Destination: Dependence
$(CC) -o $@ $^ $(LIBS)

 

reference:

  http://www.laruence.com/2009/11/18/1154.html

  https://www.cnblogs.com/jeakeven/p/5546614.html

  https://www.cnblogs.com/tinywan/p/7230039.html

转载于:https://www.cnblogs.com/bingoc/p/10820712.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值