从脚本调用 make,仅当 main.c 被修改时

Call make from script, only if main.c is modified

问题:我只想 运行 一个脚本(例如 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的副本,或者文件的时间戳将被存储(可能在文件中),以便下次脚本 运行s 时,它将恢复该信息并检查 if 条件以查看时间戳是否不同。那么,第二个问题,如何去做呢?

简单

#!/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.c 在上一个 make

之后更新时,main 规则才会 运行