Makefile:用于比较的测试Makefile

Makefile:用于比较的测试Makefile,makefile,grep,Makefile,Grep,我需要制作一个makefile,将我编写的命令grep输出与.out文件进行比较。grep搜索的输入文本文件位于tests/*.test中 Beta的回答很有帮助,只是我不明白为什么会有这个makefile INPUT_DIR=tests OUTPUT_DIR=outputs FILES=$(wildcard ${INPUT_DIR}/*.test) TEST_LIST = ${FILES:${INPUT_DIR}/%.test=%.diff} .PHONY: all clean dis

我需要制作一个makefile,将我编写的命令grep输出与.out文件进行比较。grep搜索的输入文本文件位于tests/*.test中

Beta的回答很有帮助,只是我不明白为什么会有这个makefile

INPUT_DIR=tests

OUTPUT_DIR=outputs

FILES=$(wildcard ${INPUT_DIR}/*.test)

TEST_LIST = ${FILES:${INPUT_DIR}/%.test=%.diff}

.PHONY: all clean distclean

all: ${TEST_LIST}
    echo ${FILES}
    echo ${TEST_LIST}
${TEST_LIST}: ${INPUT_DIR}/%.test ${OUTPUT_DIR}/%.out
    ./grep apple $< >STDOUT
    diff STDOUT ${OUTPUT_DIR}/$*.out > $@
${INPUT_DIR}/%.test:
    echo $@
${OUTPUT_DIR}/%.out:
    echo $@
clean:
    rm -f ${FILES}
并使用
makefile all

make: Nothing to be done for `makefile'. 
echo tests/%.test tests/%.test 
echo outputs/%.out outputs/%.out 
./grep apple tests/%.test >STDOUT

您的问题尚不清楚,但由于您使用文件
STDOUT
作为中间文件,每次比较都使用它,并且不使用它,因此我建议您结合以下规则:

%.diff: ${INPUT_DIR}/%.test ${OUTPUT_DIR}/%.out
    ./grep apple $< >STDOUT  # Do you really have an executable called "grep"?
    diff STDOUT ${OUTPUT_DIR}/$*.out > $@

我不确定你的问题是什么(或者你到底想做什么),但你的
all
规则几乎肯定不会达到你的目的。
%.diff: ${INPUT_DIR}/%.test ${OUTPUT_DIR}/%.out
    ./grep apple $< >STDOUT  # Do you really have an executable called "grep"?
    diff STDOUT ${OUTPUT_DIR}/$*.out > $@
all:
    @echo you must specify a target, e.g. outputs/foo.diff