Makefile 编写技巧
自动遍历目录下的cpp文件和hpp文件,不用每次都加
SRC_PATH := src src/Common src/XXXX
APP_SRCS = $(foreach dir, $(SRC_PATH), $(wildcard $(dir)/*.c $(dir)/*.cpp))
APP_SUB_INCLUDES := logic/include logic/XXXX
include ../../XXXX/Makefile.mk
CFLAGS += -D _YUQIANG 增加编译宏
find ./src -maxdepth 8 -type d ! -path "*unittest*" ! -path "*demo*" ! -path "*cloudshadow*" ! -path "*watchdog*" 查找./src 目录下的文件目录 除了 unittest 等等
gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld
上面这句表示在编译hello.c时:
-I /home/hello/include表示将/home/hello/include目录作为第一个寻找头文件的目录,寻找的顺序是:/home/hello/include-->/usr/include-->/usr/local/include
-L /home/hello/lib表示将/home/hello/lib目录作为第一个寻找库文件的目录,寻找的顺序是:/home/hello/lib-->/lib-->/usr/lib-->/usr/local/lib
-lworld表示在上面的lib的路径中寻找libworld.so动态库文件(如果gcc编译选项中加入了“-static”表示寻找libworld.a静态库文件)
-Wl,--start-group -lmy_lib -lyour_lib -lhis_lib -Wl,--end-group -ltheir_lib
它用于解决几个库之间的循环依赖(在 – (和 – )之间列出)。
-(
archives-)
or--start-group
archives--end-group
The archives should be a list of archive files. They may be either explicit file names, or -l options.
The specified archives are searched repeatedly until no new undefined references are created. Normally, an archive is searched only once in the order that it is specified on the command line. If a symbol in that archive is needed to resolve an undefined symbol referred to by an object in an archive that appears later on the command line, the linker would not be able to resolve that reference. By grouping the archives, they all be searched repeatedly until all possible references are resolved.
Using this option has a significant performance cost. It is best to use it only when there are unavoidable circular references between two or more archives.
因此,组内的库可以多次搜索新的符号,并且您不需要像-llib1 -llib2 -llib1这样的丑陋的构造
PS归档意味着基本上是一个静态库(* .a文件)