我正在编写一个makefile脚本,它应该能够解析由相同的makefile创建的文件。我使用以下代码来解析$(FileName)
文件。当我执行时,我看到**cat: InputFile:No such file or directory**
。这段代码对于已经存在的文件工作得很好,但如果在我运行make之前文件不存在,则不起作用。你能建议我如何解决这个问题吗?提前谢谢。
Makefile中的代码片段-
test_connection:
. . .
//Create file named $(Filename)
. . .
$(call generate_list,$(FileName))
define generate_list
$(eval FILE_DATA= $(shell cat $(DIR)/$1);
$(foreach word, $(FILE_DATA),
. . .
endef
你的问题是你越界了。使解析和处理发生在任何规则体运行之前。目标规则主体只在此之后运行。因此,你不能在目标规则体中创建一个文件,并期望它在make上下文期间可用(不使用包含的makefile,但我们将在一分钟内得到它)。
这个问题最简单的解决方案是将解析完全移出make,并在shell(或其他)脚本中进行解析。如果你需要这些内容去做一些决策,这显然是行不通的。尽管.
另一个可能的解决方案是使用一个包含的makefile,并利用这样一个事实,即当make重新构建一个包含的makefile时,它将从头开始重新启动其处理(然后使该makefile的内容从一开始就可用)。要做到这一点,您需要:
- 在makefile 中添加
- 创建一个
$(Filename):
目标,并使用一个规则来构建它 - 解析makefile 顶层的文件(当它存在时)
- 在
test_connection
规则 中做您需要的解析数据(我假设在一些makefile变量中)
include $(Filename)
行