这是一个Makefile的自动生成工具,用来创建一些较为复杂的自动化测试脚本,主要特性:
- 支持自动生成基础的Makefile框架,以及导入自己编写的Makefile框架
- 支持进行安全检测,每个步骤结束后,对生成的文件,文件夹都会进行检测,来确保确实生成成功,否则脚本就会尽早报错,避免一些传参时,文件在找不到时工具却没有报错的情况。
- 对脚本执行是否成功进行检测,如果遇到执行失败的命令会中断并保留现场方便调试
- 支持完整性检测,每个步骤只有所有的步骤全部完成后,最后的标记才会标记当前步骤已完成
- 自动对一系列可能情况生成target,避免模式匹配中匹配不到的问题
- 自动确保cd到的目录,目标文件生成目录均存在
新定义的语法:
target-%(ARRAY)-%(CASE2): %(ARRAY)-%(CASE2) 这种可以一次性定义一组target
<FO:file/path>
可以用来标记一个输出文件,这样系统会自动加入两个检测代码,首先确保输出目录存在,避免目录错误,其次会在执行后进行检测,确保输出文件真的存在<DO:...>
目录输出<FI:...>
文件输入<DI:...>
目录输入
示例文法:
help: ## Show this help.
.PRECIOUS: hotlist/% perf/%
build/pgo-%(LTO): profdata $(TMP_PATH)/source/ ## Build PGO Build with FullLTO
mkdir -p $C/bin && touch $C/bin/clang
build/pgo-%(LTO)-%(FDO): hotlist/pgo-%(LTO) $(TMP_PATH)/source/ ## Build PGO-LTO FDOIPRA versions
mkdir -p $C/bin && touch $C/bin/clang
build/pgo-%(LTO)-%(FDO).%(VAR): build/pgo-%(LTO)-%(FDO) ## Build FDOIPRA variant versions
touch $C/bin/clang$V
build/instrumented: $(TMP_PATH)/source/ ## Build instrumented binary
mkdir -p $C/bin && touch $C/bin/clang
source: ## Download source code
wget google.com -O <FO:source.dir/1.zip>
wget github.com -O <FO:source.dir/2.zip>
$(TMP_PATH)/source/: source
cd $(TMP_PATH)
mkdir -p <DO:$(TMP_PATH)/source> && cat <FI:$(BUILD_PATH)/source.dir/1.zip> > $(TMP_PATH)/source/1.c
hotlist/%: perf/% ## Generate hotlist
mkdir -p hotlist
cat <FI:$(BUILD_PATH)/$< > | awk '{print "hotlist gen from:\n $$1"}' > <FO:$@>
profdata: build/instrumented ## Generate profdata
echo "prof data gen" > <FO:$@>
perf/%: build/% ## Run perf record
mkdir -p perf
cat <FI:$C/bin/clang$V> > <FO:$@>
bench/%: build/% ## Run perf stat
mkdir -p bench
cat <FI:$C/bin/clang$V> > <FO:$@>
使用 wget
下载 get.sh
脚本执行
wget https://fastly.jsdelivr.net/gh/sunxfancy/UMake@master/etc/get.sh -O - | bash
使用 curl
下载 get.sh
脚本执行
curl -fsSL https://fastly.jsdelivr.net/gh/sunxfancy/UMake@master/etc/get.sh | bash
使用 Powershell
下载 get.ps1
脚本执行
Invoke-Expression (Invoke-WebRequest -Uri https://fastly.jsdelivr.net/gh/sunxfancy/UMake@master/etc/get.ps1 -UseBasicParsing).Content