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
- “?=”,使用"?=",表示如果该变量没有被赋值,则赋予等号后的值
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')
+=跟平时写代码的含义是一样的。