GNU Make用于构建过时且比特定时间戳更新的文件

时间:2012-02-22 17:20:23

标签: c build makefile timestamp gnu

我使用GNU Make 3.81来构建给定的C项目。 GNU的正常行为是检查,如果目标存在且任何先决条件比目标更新,则执行目标命令。

如果先决条件比目标更新并且比给定时间戳更新,是否可以重建目标?可以说,它仅在文件比2011年10月2日更新时才构建。

2 个答案:

答案 0 :(得分:2)

没有办法直接使用make,但您可以在规则的操作中使用shell来执行此操作:

target: prereq
        touch --date='Oct 2, 2011' .timestamp
        if [ $< -nt .timestamp ]; then         \
            command to rebuild target;        \
        fi

请注意使用\使if命令成为单个命令。您还可以使用else来处理目标已过期且前提条件也已过时的情况。

答案 1 :(得分:0)

make将重新制作比任何其先决条件更新的所有目标,因此您的条件将难以实施。

如果要在构建目录中引入一个纪元,只需使用touch -d将所有文件的修改时间戳设置为纪元时间。不是一个漂亮的,但一个有效的解决方案