在工作中会少许改动系统软件同事写的makefile,所以有空学习了解下
makefile中的一些符号:
$@ 表示目标文件
$^ 表示所有的依赖文件
$< 表示第一个依赖文件
$? 表示比目标还要新的依赖文件列表
例如:
libosal.so: $(OBJS_LIB)
$(CC) -shared -rdynamic -o $@ $^
$@ 表示lobosal.so
$^ 表示依赖的OBJS_LIB文件
gcc使用-Wl传递链接器参数,ld使用-Bdynamic强制链接动态库,-Bstatic强制链接静态库。
静态库和动态库都具有的链接如下写:
gcc ... -Wl,-Bstatic -l<your-static-lib> -Wl,-Bdynamic -l<your-dynamic-lib> ...
如下写法也可
LIBS += -l<auto-link-lib>
STATIC_LIBS += -l<static-lib>
DYN_LIBS += -l<dynamic-lib>
LDFLAGS := ${LIBS} -Wl,-Bstatic ${STATIC_LIBS} -Wl,-Bdynamic ${DYN_LIBS}
你在不关心链接的时候可以用LIBS,想静态链接的时候用STATIC_LIBS,想动态链接的时候用DYN_LIBS。
gcc编译参考知乎:https://www.zhihu.com/question/22940048/answer/222625910