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

时间:2014-08-19 11:41:22

标签: 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

1 个答案:

答案 0 :(得分:0)

你的问题是你越界了。在运行任何规则体之前进行解析和处理。目标规则主体仅在此之后运行。因此,您无法在目标规则体中创建文件,并希望它可以在make上下文中使用(不使用包含的makefile,但我们将在一分钟内完成)。

解决这个问题的最简单方法就是将解析完全移出make,然后在shell(或其他)脚本中执行。如果您需要某些制作级决策等的内容,这显然不起作用。虽然。

另一种可能的解决方案是使用包含的makefile并利用以下事实:当make重建包含的makefile时,它将从头开始重新开始处理(然后从一开始就使该makefile的内容可用)。要做到这一点,你会:

  1. 在您的makefile中添加include $(Filename)
  2. 使用规则创建$(Filename):目标以构建它
  3. 解析文件顶层的文件(如果存在)
  4. 使用test_connection规则中的解析数据(我假设的一些makefile变量)执行您需要的操作