为了构建我的目标,我有一个文件list.txt
中包含的先决条件列表和一个用于生成此文件generate-list.sh
的脚本。
我每次调用make时都需要首先执行脚本,以便更新list.txt
并为ti make
提供正确的先决条件列表。
prebuild:
touch list.txt
.SECONDEXPANSION:
exe: prebuild $$(shell cat list.txt)
touch exe
<files in list.txt>:
<rules for generating these files>
这样,当我运行make
时,我首先收到来自cat
的错误,说list.txt
不存在,然后生成list.txt
但是cat
无法生成list.txt
中包含的先决条件。
答案 0 :(得分:0)
考虑到每次必须在最开始时执行generate_list.sh
,您可以使用的一种方法是使用shell
函数显式执行它。这意味着将makefile
改为
$(shell ./generate_list.sh > /dev/null)
.SECONDEXPANSION:
exe: $(shell cat list.txt)
touch exe
@echo $?
<files in list.txt>:
<rules for generating these files>
执行此makefile
会产生
$ make
touch exe
deps.c test.c
我的generate_list.sh
文件包含
#!/bin/bash
touch test.c deps.c
echo deps.c test.c > list.txt
echo 'Created prerequisites list.'
/dev/null
包含在$(shell ./generate_list.sh > /dev/null)
中,因为generate_list.sh
会产生输出,因为这会导致make
中的错误
$ make
GNUmakefile:1: *** missing separator. Stop.
否则。
@echo $?
表明list.txt
中的所有先决条件现已包含在exe
的先决条件中。
您尝试执行的操作与automatic dependency生成非常相似,可以使用make
中的-include
指令完成此操作。对于将来的使用,您可能需要考虑沿着这条路线行进并更改generate_list.sh
脚本,以创建可以包含在主makefile
中的makefile
。