首页 > 解决方案 > 如何使用 awk 解析 Makefile

问题描述

我是 awk 脚本的新手。我需要帮助找出解析makefile的方法。

下面是我的示例制作文件。我使用“make tests”来运行我的测试。“LESTS=”下列出的所有测试文件。在这里,我只列出了 3 个文件(connect、proxy-connect、connect-privsep),但实际上我有 70 个文件。如何获取“LTESTS =”中列出的所有文件。

我搜索但无法找到提取方法。谢谢你的帮助。

    REGRESS_TARGETS=    t-exec
tests:      prep $(REGRESS_TARGETS)

prep:
    test "x${USE_VALGRIND}" = "x" || mkdir -p $(OBJ)/valgrind-out

LTESTS=     connect \
        proxy-connect \
        connect-privsep



t-exec: ${LTESTS:=.sh}
    @if [ "x$?" = "x" ]; then exit 0; fi; \
    for TEST in ""$?; do \
        echo "run test $${TEST}" ... 1>&2; \
        (env SUDO="${SUDO}" TEST_ENV=${TEST_ENV} ${TEST_SHELL} ${.CURDIR}/test-exec.sh ${.OBJDIR} ${.CURDIR}/$${TEST}) || exit $$?; \
    done

标签: bashawksed

解决方案


$ awk 'sub(/.*LTESTS=/,""){f=1} !NF{f=0} f{print $1}' file
connect
proxy-connect
connect-privsep

或者如果 LESTS 块后没有空行:

awk 'sub(/.*LTESTS=/,""){f=1} f{print $1; if (!/\\/) exit}' file

推荐阅读