makefile:用户函数(宏)ifeq无法按预期工作

时间:2016-06-03 03:50:09

标签: if-statement makefile macros

已过时:不再感兴趣了。

我正在尝试使用 ifeq makefile条件验证并选择makefile宏的执行路径...

我在mingw中使用makefile和make的旧版本(3.79.1),但是不能修改构建系统以更新到最新的make版本。

我正在向用户函数发送参数,并根据这些参数,我想评估执行路径:

define CHECK_FILE
if ($(1),))
$(error Empty file provided to check! - $(1))
endif

ifeq ($(wildcard $(1)),)
$(error Invalid file provided for checking (file does not exist)! - $(1)!)
endif

ifeq ($(2),SPEED)
$(ROOT_PATH)/Tools/testSpeed.exe $(1)
else ifeq ($(2),ENDURANCE)
$(ROOT_PATH)/Tools/testStability.exe $(1)
else ifeq ($(2),MEMORY)
$(ROOT_PATH)/Tools/check_leaks.exe 8079 $(1)
else
$(error Bad test provided - $(2)!)
endif

endef

问题是我总是得到提供的#34;空文件来检查! - ......"错误..我做错了什么?

我可以t even add an echo in this macro.... it simply won打印出任何东西!所以关于调试......

鉴于我目前的经验 - 我讨厌gnu make和msys / mingw与我身体的每一个细胞......我感谢任何帮助以避免将来讨厌它。

从几个地方调用宏,包括许多foreach循环:

someTArget:
    @$(foreach outFile,$(INCLUDED_FILES),$(call CHECK_FILE,$(FILE_OUT_PATH)/$(outFile),MEMORY))
    @$(foreach outFile,$(BUILT_BIN_FILES),$(call CHECK_FILE,$(FILE_OUT_PATH)/$(outFile),ENDURANCE))
    @$(foreach outFile,$(BUILT_BIN_FILES),$(call CHECK_FILE,$(FILE_OUT_PATH)/$(outFile),SPEED))

在msys / mingw / make中使用MSDOS批处理文件不起作用,因为它没有看到参数%1 ...%n并且无法评估环境变量。

谢谢!

1 个答案:

答案 0 :(得分:1)

最后的'enddef'应写成'endef'。 请参阅此处的GNU文档:GNU make - Defining

其他:在

foreach external,$(INCLUDED_FILES),$(call CHECK_FILE,$(FILE_OUT_PATH)/$(outFile),MEMORY))

你指的是'outFile',但你的var是'外部'。