You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在bash循环中编译CMake生成的Makefile里指定前缀的目标子集

Shell脚本编译运行CMake生成的单元测试目标解决方案

核心逻辑说明

你需要从CMake生成的Makefile中,过滤出所有以UnitTest为前缀、不带/fast后缀的编译目标,通过文本处理提取目标名后循环编译即可:

  • 用grep匹配行首为UnitTest、不包含/的目标规则行,排除fast编译规则
  • 用cut按冒号分割切取出目标名称
  • 用sort -u去重避免重复编译同一个目标

修正后的完整脚本

WORKDIR=$PWD
BUILD=~/Dropbox/Projects/Apeiron/build
BIN="$BUILD/bin"

# 编译测试二进制文件
cd "$BUILD" || exit 1
# 提取所有符合要求的单元测试目标
for target in $(grep -E '^UnitTest[^/]*:' Makefile | cut -d: -f1 | sort -u)
do
  echo ""
  echo "Compiling $target" 
  make -j 8 "$target" || exit 1
done

# 运行测试
cd "$BIN" || exit 1
for test in UnitTest*
do
  echo ""
  echo "Running $test" 
  ./"$test"
done

cd "$WORKDIR"

补充说明

  • 脚本中给路径变量加了双引号,避免路径存在空格时执行异常
  • 新增了|| exit 1逻辑,目录切换失败或者编译失败时直接终止脚本,避免后续执行出错
  • 你可以根据自己CPU的核心数调整make -j后的并行编译数值

内容的提问来源于stack exchange,提问作者niran90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:54:03