【Makefile 文件,gcc常见编译参数说明】

1.【$<】【$@】 【$?】【$^】参数说明

$@  表示目标文件
$^  表示所有的依赖文件
$<  表示第一个依赖文件
$?  表示比目标还要新的依赖文件列表

详细说明链接:https://www.bbsmax.com/A/RnJWOrpBJq/

2.【-O0 】【-O1】【-O2 】【 -O3】【 -OS】

-O0: 不做任何优化,这是默认的编译选项。
-O1:优化会消耗较多的编译时间,它主要对代码的分支,常量以及表达式等进行优化。
-O2:会尝试更多的寄存器级的优化以及指令级的优化,它会在编译期间占用更多的内存和编译时间。
-O3: 在O2的基础上进行更多的优化
-Os:相当于-O2.5。是使用了所有-O2的优化选项,但又不缩减代码尺寸的方法。
详细说明链接:https://blog.csdn.net/wuxing26jiayou/article/details/96132721

3.【-w】【-W】【-Wall】

-w:关闭编译时的警告,也就是编译后不显示任何warning,因为有时在编译之后编译器会显示一些例如数据转换之类的警告,这些警告是我们平时可以忽略的。
-W:会显示警告,但是只显示编译器认为会出现错误的警告。
说明:gcc -W main.c - o test 和gcc main.c -o test等价
-Wall:显示编译器能提供的所有警告。
详细说明链接:
https://blog.csdn.net/wuxing26jiayou/article/details/96132721

4.Makefile文件示范

文件名:Makefile
待编译文件:main.c thread_pool.c thread_pool.h
目标文件:test

CC = gcc
CFLAGS = -O0 -Wall -g -lpthread

test:main.c thread_pool.c
	$(CC) $^ -o $@ $(CFLAGS)

debug:main.c thread_pool.c
	$(CC) $^ -o $@ $(CFLAGS) -DDEBUG

clean:
	$(RM) .*.sw? test debug *.o

.PHONY:all clean

5.生成静态库命令

操作步骤如下

g++ -c muti.cpp
ar rcs libmuti.a muti.o

最后生成.a文件如下

libmuti.a

6.生成动态库命令

操作步骤如下

g++  divi.cpp -fPIC -shared -o libdivi.so

最后生成的.so文件如下

libdivi.so

7.Makefile 中=,:=,?=,+=的含义

1.“=” ,使用”=”进行赋值,变量的值是整个makefile中最后被指定的值.举个例子

VAR_1 = a
VAR_2 = $(VAR_1) b
VAR_1 = aa
最终VAR_1 = aab
	VAR_2 = ab

2.“:=”,使用":="时,表示直接赋值

VAR_1:= a
VAR_2:= $(VIR_1) b
VAR_1:= aa
最终var_2的值时ab,var1的值时aa
  1. “?=”,使用"?=",表示如果该变量没有被赋值,则赋予等号后的值
VIR := old_value
VIR ?= new_value
最终VIR的值是old_value

4.“+=”,使用"+=" 表示a+=v等效含义a=a+v
“+=”和平时写代码的理解是一样的,表示将等号后面的值添加到前面的变量上

CSRCS += $(shell find $(LVGL_PATH)/src -type f -name '*.c')
CSRCS += $(shell find $(LVGL_PATH)/demos -type f -name '*.c')
CSRCS += $(shell find $(LVGL_PATH)/examples -type f -name '*.c')
+=跟平时写代码的含义是一样的。
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值