我正在使用GNU Make 3.81构建给定的C项目。 GNU的正常行为是检查,如果目标存在,并且任何先决条件比目标更新,则执行目标命令。GNU Make构建过时且比特定时间戳更新的文件
如果先决条件比目标更新且比给定时间戳更新,是否可以重建目标?比方说,只有在文件比2011年10月2日更新的情况下才会生成。
我正在使用GNU Make 3.81构建给定的C项目。 GNU的正常行为是检查,如果目标存在,并且任何先决条件比目标更新,则执行目标命令。GNU Make构建过时且比特定时间戳更新的文件
如果先决条件比目标更新且比给定时间戳更新,是否可以重建目标?比方说,只有在文件比2011年10月2日更新的情况下才会生成。
有没有办法直接用make做到这一点,但你可以在该规则的行动外壳做:
target: prereq
touch --date='Oct 2, 2011' .timestamp
if [ $< -nt .timestamp ]; then \
command to rebuild target; \
fi
注意使用\
使if
命令一个命令。您也可以使用else
来处理目标已过期并且prereq也很旧的情况。
make
将重新使出现不到任何其先决条件的所有目标,所以你和 condititon将难以实现。
如果你想在编译目录中引入一个时代,你可以简单地将所有文件的修改时间戳设置为touch -d
。不是一个漂亮,而是一个工作解决方案。