在makefile脚本中解析运行时创建的文件



我正在编写一个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的内容从一开始就可用)。要做到这一点,您需要:

  1. 在makefile
  2. 中添加include $(Filename)
  3. 创建一个$(Filename):目标,并使用一个规则来构建它
  4. 解析makefile
  5. 顶层的文件(当它存在时)
  6. test_connection规则
  7. 中做您需要的解析数据(我假设在一些makefile变量中)

最新更新