获得Makefile中的目标列表可以通过以下方法:
make -qp --no-print-directory | awk -F':' '/^[a-zA-Z0-9][^$#\\t=]*:([^=]|$)/ {split($1,A,/ /);for(i in A)print A[i]}' | sort -u
命令。这个命令会执行以下操作:
make -qp --no-print-directory
:使用make
命令以-q
(安静模式)和-p
(显示所有规则)选项执行,不显示任何输出。awk -F':' '/^[a-zA-Z0-9][^$#\\t=]*:([^=]|$)/ {split($1,A,/ /);for(i in A)print A[i]}'
:使用awk
命令以冒号(:
)作为分隔符,筛选出所有以目标名称开头的行,并将结果存储在数组A
中。然后,遍历数组并打印每个目标名称。sort -u
:使用sort
命令以-u
选项对结果进行排序并去除重复项。grep
命令筛选出包含目标名称的行,然后使用awk
命令提取目标名称。这个方法可以通过以下命令实现:
grep -oE '^[a-zA-Z0-9][^:]*:' Makefile | awk -F':' '{print $1}' | sort -u
这个命令会执行以下操作:
grep -oE '^[a-zA-Z0-9][^:]*:' Makefile
:使用grep
命令以-o
(仅输出匹配部分)和-E
(使用扩展正则表达式)选项,筛选出以目标名称开头的行。awk -F':' '{print $1}'
:使用awk
命令以冒号(:
)作为分隔符,提取目标名称。sort -u
:使用sort
命令以-u
选项对结果进行排序并去除重复项。这两种方法都可以获得Makefile中的目标列表,您可以根据自己的需求选择合适的方法。
领取专属 10元无门槛券
手把手带您无忧上云