只有在修改main.c时才从脚本调用make

时间:2015-07-01 13:51:55

标签: c bash shell makefile timestamp

问题:我想只运行一个脚本(例如run.sh),它将决定是否应该调用make(并在需要时调用它)然后运行可执行文件。

我的项目只有一个文件,即main.c.然而,只是链接让我等了一点,我调试时不喜欢的东西,我渴望程序运行。我希望这样的东西进入run.sh:

#!/bin/bash
if[ main.c has changed from the last time make was called] then
  make > compile.txt
fi
./a.out

这样只有在修改main.c时才会调用make。通过修改,可以认为时间戳已更改(即使这可能不是实际标准)。这可行吗?

如果是这样,我看到了这个answer,这让我觉得每次进入调用make的if语句的主体时,都会创建main.c的副本,或者文件的时间戳。将被存储(可能在文件中),以便下次脚本运行时,它将恢复该信息并检查if条件以查看时间戳是否不同。那么,第二个问题是,如何做到这一点?

1 个答案:

答案 0 :(得分:3)

简单地

#!/bin/bash

if [ a.out -ot main.c ]; then
    make > compile.txt
fi

./a.out

-ot相当于

但是,这种行为是make本身所期望的。我更喜欢像

这样的makefile
CC = gcc
CFLAGS = -Wall -W

main: main.c
    $(CC) $(CFLAGS) -o $@ $^

只有在main

之后更新main.c时才会运行make规则