Ninja构建工具自定义构建步骤描述的最优实现方式咨询
规范实现Ninja自定义构建步骤描述的方法
Ninja的description字段就是官方提供的自定义构建步骤描述的规范方式,你之前没看到效果,大概率是因为目标已处于最新状态,或者clean目标的配置导致前面的构建步骤被跳过。以下是具体的解决步骤:
1. 为每个Rule正确添加description字段
修改你的build.ninja,在每个规则中加入description字段,自定义你想要显示的内容:
# VARIABLES cc = gcc cflags = -Wall -Wextra -Werror ldflags = -lm target = helloProgram source = main.c # RULES rule compile command = $cc $cflags -c $in -o $out description = Compiling source: $in rule link command = $cc $ldflags $in -o $out description = Linking executable: $out rule clean command = rm -f $target.o $target description = Cleaning build files build $target.o: compile $source build $target: link $target.o # 改用phony规则定义clean,避免默认构建时自动执行清理 build clean: phony rule = clean
2. 确保目标需要重新构建
如果之前已经执行过构建,生成的文件处于最新状态,Ninja会跳过这些步骤,自然不会显示对应的描述。先删除已生成的文件:
rm -f helloProgram.o helloProgram
再执行ninja,此时非verbose模式下会输出自定义描述:
[1/2] Compiling source: main.c [2/2] Linking executable: helloProgram
执行ninja clean时,会显示:
[1/1] Cleaning build files
3. 关于verbose模式的说明
使用ninja -v时,Ninja会默认显示完整的执行命令而非description内容,这是设计初衷(verbose模式就是用来查看实际执行的命令)。如果不需要查看命令细节,直接用无参数的ninja即可看到自定义描述。
4. 纠正clean目标的配置(规范做法)
你原配置中把clean作为普通build目标,会导致每次执行ninja都自动清理生成的文件,这不符合常规构建流程。改用phony规则后,只有显式执行ninja clean才会触发清理,避免构建后立即删除目标文件。
这种方法完全基于Ninja官方特性,不需要在command中插入echo/printf这类hack手段,是最规范的实现方式。
内容的提问来源于stack exchange,提问作者Dmytro Kovryzhenko
相关产品推荐
相关产品推荐

