2012-02-22 50 views
4

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

如果先决条件比目标更新且比给定时间戳更新,是否可以重建目标?比方说,只有在文件比2011年10月2日更新的情况下才会生成。

回答

2

有没有办法直接用make做到这一点,但你可以在该规则的行动外壳做:

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

注意使用\使if命令一个命令。您也可以使用else来处理目标已过期并且prereq也很旧的情况。

0

make将重新使出现不到任何其先决条件的所有目标,所以你 condititon将难以实现。

如果你想在编译目录中引入一个时代,你可以简单地将所有文件的修改时间戳设置为touch -d。不是一个漂亮,而是一个工作解决方案。