在我的makefile中,我想检查是否存在库并提供信息性错误消息。我创建了一个条件,在找不到文件时应退出make进程:
9: ifeq ($(${JSONLIBPATH}),)
10: JSONLIBPATH = ${ALTJSONLIBDIR}/${LIBJSON}
11: endif
12: ifeq ($(${JSONLIBPATH}),)
13: $(error JSON library is not found. Please install libjson before building)
14: endif
我的makefile卡在第13行:
Makefile:13: *** commands commence before first target. Stop.
在第13行之后,我的makefile有了目标。
我尝试将此条件块放入目标(例如名为isJSONLibraryInstalled
的目标),但这不能正确执行。
在处理目标之前,我如何检查文件是否存在并处理错误情况?如果这是一个愚蠢的问题,请道歉。
答案 0 :(得分:72)
首先,您正在查看以当前路径命名的变量的内容,这可能不是您想要的。一个简单的环境变量引用是$(name)
或${name}
,而不是$(${name})
。因此,始终评估第13行。
其次,我认为$(error ...)
表达式的缩进令人窒息。当表达式解析为空字符串时,行的开头仍然有一个制表符,表示一个命令,而该命令又不能存在于规则之外。
我认为使用空格而不是制表符来缩进是可行的。
答案 1 :(得分:1)
对我而言,在导致此问题的连接器之前是一个不必要的空白区域。 在slickEdit上,我选择了查看所有特殊字符的选项并注意到了黑羊。