makefile编译文件分析

在BHuman中,我们编译代码的时候,会在Make/Linux目录下输入make,然后就能够开始进行项目的编译,这主要是依靠于该文件目录下的makefile文件。

makefile具体实现

该文件具体内容如下:

MARE := ../../Util/SimRobot/Util/mare/Linux/bin/mare
CONFIG ?= Develop
QTINCLUDE = `for d in $(shell find /usr/include /usr/local/include -name qt5 \( -type l -or -type d \)); do [ -d $$d/QtCore ] && echo $$d; done | head -n1`
CLANGINCLUDE = `for d in $(shell clang++ -c -v -E - </dev/null 2>&1 | sed -n -e '/here:/,/^End/{/here:/d; /^End/d; p}'); do [ -f $$d/xmmintrin.h ] && echo $$d; done | head -n1`
SSSE3 = `(grep ssse3 </proc/cpuinfo ; echo 'ssse3=false') | head -1 | sed 's/.*ssse3 .*/ssse3=true/'`
AVX2 = `(grep avx2 </proc/cpuinfo ; echo 'avx2=false') | head -1 | sed 's/.*avx2 .*/avx2=true/'`
FLAGS = $(SSSE3) $(AVX2)

.PHONY: all clean

all:
	@$(MARE) config=$(CONFIG) qtinclude=$(QTINCLUDE) clanginclude=$(CLANGINCLUDE) $(FLAGS)

clean:
	@$(MARE) clean config=$(CONFIG)

%:
	@$(MARE) $@ config=$(CONFIG) qtinclude=$(QTINCLUDE) clanginclude=$(CLANGINCLUDE) $(FLAGS)

在具体看代码之前,首先要明确一点,在BHuman中的编译和一般的工程文件编译不同,它并不是把各个文件的编译规则统一都写在makefile中,而是利用了第三方工具Mare,这个工具本身在BHuman中是以执行文件的格式放在代码里的,主要就是用来进行项目的编译。
接下来我们逐行分析:

  1. 第一行定义了变量MARE,用来记录刚刚提到的第三方工具Mare的可执行文件路径
  2. 第二行定义了编译的版本,或者说方式,不同的编译方式的差异主要会体现在最终的编译结果上,比如是否编译测试、仿真功能等
  3. 第三行和第四行分别定义了qt和clang这两个依赖库的环境变量,用于编译
  4. 五到七行是PC端的一些硬件配置信息,比如CPU指令集等
  5. 定义all和clean两个伪目标,相当于标签,可以用于索引对应的命令
  6. 后三行都是对Mare这个第三方库的调用,根据你在终端的输入来执行命令,比如make clean 或 make,分别对应着 clean 和 all 后的 命令。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值