在makefile中,有没有办法将$(警告)或$(info)语句重定向到文件

时间:2017-01-20 18:38:01

标签: debugging makefile gnu

请注意,我不想将所有 make输出重定向到文件。我只希望将$(warning)命令的输出发送到文件。

someTarget:
    $(warning building $@ using $?) >> someLogFile.txt

我上面的示例没有将输出从$重定向(警告到someLogFile。有没有办法做到这一点?可能将其重定向到变量然后将其回送到文件? 感谢。

1 个答案:

答案 0 :(得分:0)

  

有没有办法将$(警告)或$(info)语句重定向到文件?

这是GNU Make的一个,但它并不漂亮:

<强>生成文件

LOG := log.txt
TARGET_ACQUIRED = \
    $(shell echo 'NO_SUCH_TARGET:' | $(MAKE) --eval='$$(info Target acquired: $@...)' -s -f - >> $(LOG))

target_a: target_b
    $(TARGET_ACQUIRED)
    touch $@

target_b:
    $(TARGET_ACQUIRED)
    touch $@

clean:
    rm -f target_* $(LOG)

您将获得:

$ make
touch target_b
touch target_a
$ cat log.txt
Target acquired: target_b...
Target acquired: target_a...

要理解这种诡计,请参阅GNU make commandline options

如果你想调试一个makefile,你可能会这样做 使用GNU Make的--debug选项可以更好地记录在同一个地方。