等待运行目标的 makefile 列表
Runing a makefile list of target with wait
我有一个包含 运行 几个目标的 make 文件,现在我想添加新的目标,在超时后 运行,我该怎么做?
例如
execbin: build start run
这 运行 没问题,但是我想添加新目标 称为测试 两秒后将 运行
(超时),我该怎么做?
execbin: build start run test
test
应在 运行 完成后执行,并在开始前等待 2 秒,这可能吗?
懒惰的解决方案是添加一个名为 'sleep-2' 的新目标,以及一个模式规则:
execbin: build start run sleep-2 test
sleep-%:
sleep $(@:sleep-%=%)
这将创建一个 pattern rule,它采用 sleep-<> 目标中连字符后的值,并将其用作睡眠时间。
I will echo @MadScientists's answer that this probably will not work if you do make -j
, which really does require changing the targets to depend on each other.
向列表中添加更多先决条件依赖于 make 的行为,它总是尝试按顺序构建先决条件。虽然这是 POSIX 的记录要求,因此它始终是正确的,但只有在您不在构建中使用并行性时它才能很好地工作(您不 运行 和 -j
).如果这样做,那么 make 可以 运行 同时 所有这些目标 。
如果你想确保一个给定的目标在另一个目标完成之前不会启动,正确的方法是声明它们之间的 prerequisite 关系,而不是添加它们到不同目标的先决条件列表的末尾。
因此,例如,如果您希望 test
目标在 run
目标完成之前不启动,您应该声明:
test: run
run my tests
现在,test
在 run
完成之前无法启动。引入睡眠的最简单方法就是将其放入 test
的配方中,如下所示:
test: run
sleep 2
run my tests
如果您想更花哨并使用单独的目标,那么您需要 link 先决条件,如下所示:
test: sleep-2
run my tests
sleep-2: run
sleep 2
除非你有很多,否则我认为上面的简单方法更容易理解。
我有一个包含 运行 几个目标的 make 文件,现在我想添加新的目标,在超时后 运行,我该怎么做?
例如
execbin: build start run
这 运行 没问题,但是我想添加新目标 称为测试 两秒后将 运行 (超时),我该怎么做?
execbin: build start run test
test
应在 运行 完成后执行,并在开始前等待 2 秒,这可能吗?
懒惰的解决方案是添加一个名为 'sleep-2' 的新目标,以及一个模式规则:
execbin: build start run sleep-2 test
sleep-%:
sleep $(@:sleep-%=%)
这将创建一个 pattern rule,它采用 sleep-<> 目标中连字符后的值,并将其用作睡眠时间。
I will echo @MadScientists's answer that this probably will not work if you do
make -j
, which really does require changing the targets to depend on each other.
向列表中添加更多先决条件依赖于 make 的行为,它总是尝试按顺序构建先决条件。虽然这是 POSIX 的记录要求,因此它始终是正确的,但只有在您不在构建中使用并行性时它才能很好地工作(您不 运行 和 -j
).如果这样做,那么 make 可以 运行 同时 所有这些目标 。
如果你想确保一个给定的目标在另一个目标完成之前不会启动,正确的方法是声明它们之间的 prerequisite 关系,而不是添加它们到不同目标的先决条件列表的末尾。
因此,例如,如果您希望 test
目标在 run
目标完成之前不启动,您应该声明:
test: run
run my tests
现在,test
在 run
完成之前无法启动。引入睡眠的最简单方法就是将其放入 test
的配方中,如下所示:
test: run
sleep 2
run my tests
如果您想更花哨并使用单独的目标,那么您需要 link 先决条件,如下所示:
test: sleep-2
run my tests
sleep-2: run
sleep 2
除非你有很多,否则我认为上面的简单方法更容易理解。