折腾:
【已解决】Makefile自定义函数调用出错:unterminated call to function `notdir’: missing `)’. Stop
期间,define的自定义函数中,想要调试,所以要去打印变量信息。
但是用echo没有输出信息
去加上info试试:
<code>MAKEFILE_LIST_LASTWORD = $(lastword $(MAKEFILE_LIST)) # echo MAKEFILE_LIST_LASTWORD=$(MAKEFILE_LIST_LASTWORD) $(info "MAKEFILE_LIST_LASTWORD="${MAKEFILE_LIST_LASTWORD}) </code>
结果:还是无输出,问题依旧。
makefile custom function echo not working
makefile define function echo not working
Variables inside makefile function are not expanded correctly? – Stack Overflow
makefile print inside define function
makefile 自定义函数内 打印变量值
试了半天:
<code>define getCurrentDirAndDirName echo MAKEFILE_LIST=$(MAKEFILE_LIST) # MAKEFILE_LIST_LASTWORD = $(lastword $(MAKEFILE_LIST)) # echo MAKEFILE_LIST_LASTWORD=${MAKEFILE_LIST_LASTWORD} # $(info "MAKEFILE_LIST_LASTWORD="${MAKEFILE_LIST_LASTWORD}) # print MAKEFILE_LIST_LASTWORD # MAKEFILE_PATH := $(abspath $(MAKEFILE_LIST_LASTWORD)) # echo MAKEFILE_PATH=$(MAKEFILE_PATH) MAKEFILE_DIR := $(dir $(MAKEFILE_PATH)) MAKEFILE_DIR_PATSUBST := $(patsubst %/,%,$(MAKEFILE_DIR)) MAKEFILE_DIR_NOSLASH = $(MAKEFILE_DIR_PATSUBST) CURRENT_DIR_WITH_SLASH = $(MAKEFILE_DIR) CURRENT_DIR = $(MAKEFILE_DIR_NOSLASH) CURRENT_DIR_NAME := $(notdir $(MAKEFILE_DIR_PATSUBST)) $1 := $(CURRENT_DIR_NAME) $2 := $(CURRENT_DIR) endef # $(call getCurrentDirAndDirName, CURRENT_DIR_NAME, CURRENT_DIR) $(eval $(call getCurrentDirAndDirName, CURRENT_DIR_NAME, CURRENT_DIR)) # echo "CURRENT_DIR_NAME="$(CURRENT_DIR_NAME) # $(info "CURRENT_DIR="$(CURRENT_DIR)) </code>
还是不行。
代码:
<code># get current folder name # support call makefile from anywhere, not only from current path of makefile located # MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) # CURRENT_DIR_WITH_SLASH := $(notdir $(patsubst %/,%,$(MAKEFILE_DIR)) define getCurrentDirAndDirName MAKEFILE_LIST_LASTWORD = $(lastword $(MAKEFILE_LIST)) echo MAKEFILE_LIST=$(MAKEFILE_LIST) echo MAKEFILE_LIST_LASTWORD1=${MAKEFILE_LIST_LASTWORD} $(info "MAKEFILE_LIST_LASTWORD2="${MAKEFILE_LIST_LASTWORD}) print MAKEFILE_LIST_LASTWORD3 MAKEFILE_PATH := $(abspath $(MAKEFILE_LIST_LASTWORD)) echo MAKEFILE_PATH=$(MAKEFILE_PATH) MAKEFILE_DIR := $(dir $(MAKEFILE_PATH)) MAKEFILE_DIR_PATSUBST := $(patsubst %/,%,$(MAKEFILE_DIR)) MAKEFILE_DIR_NOSLASH = $(MAKEFILE_DIR_PATSUBST) CURRENT_DIR_WITH_SLASH = $(MAKEFILE_DIR) CURRENT_DIR = $(MAKEFILE_DIR_NOSLASH) CURRENT_DIR_NAME := $(notdir $(MAKEFILE_DIR_PATSUBST)) $1 := $(CURRENT_DIR_NAME) $2 := $(CURRENT_DIR) endef # $(call getCurrentDirAndDirName, CURRENT_DIR_NAME, CURRENT_DIR) $(eval $(call getCurrentDirAndDirName, CURRENT_DIR_NAME, CURRENT_DIR)) # echo "CURRENT_DIR_NAME="$(CURRENT_DIR_NAME) # $(info "CURRENT_DIR="$(CURRENT_DIR)) </code>
输出
<code>➜ youdao_note_summary git:(master) ✗ make help "MAKEFILE_LIST_LASTWORD2=" ../Makefile_common:58: *** commands commence before first target. Stop. </code>
可见:
在define中只有用info才能输出变量值
echo和print都不行。
并且,info在# 后面,注释中,都生效
且试了试在分号后面:
<code>;$(info "MAKEFILE_LIST_LASTWORD2="${MAKEFILE_LIST_LASTWORD}) </code>
也可以输出。
然后通过:
<code>define getCurrentDirAndDirName MAKEFILE_LIST_LASTWORD = $(lastword $(MAKEFILE_LIST)) $(info {MAKEFILE_LIST}=${MAKEFILE_LIST}) $(info (MAKEFILE_LIST)=$(MAKEFILE_LIST)) $(info MAKEFILE_LIST_LASTWORD=${MAKEFILE_LIST_LASTWORD}) MAKEFILE_PATH := $(abspath $(MAKEFILE_LIST_LASTWORD)) MAKEFILE_DIR := $(dir $(MAKEFILE_PATH)) MAKEFILE_DIR_PATSUBST := $(patsubst %/,%,$(MAKEFILE_DIR)) MAKEFILE_DIR_NOSLASH = $(MAKEFILE_DIR_PATSUBST) CURRENT_DIR_WITH_SLASH = $(MAKEFILE_DIR) CURRENT_DIR = $(MAKEFILE_DIR_NOSLASH) CURRENT_DIR_NAME := $(notdir $(MAKEFILE_DIR_PATSUBST)) $1 := $(CURRENT_DIR_NAME) $2 := $(CURRENT_DIR) endef </code>
输出:
<code>➜ youdao_note_summary git:(master) ✗ make help {MAKEFILE_LIST}= Makefile ../Makefile_common (MAKEFILE_LIST)= Makefile ../Makefile_common MAKEFILE_LIST_LASTWORD= make: Nothing to be done for `help'. </code>
-》看起来是info中{xxx}和(xxx)都可以输出变量的值啊
【总结】
此处Makefile中define的自定义函数中,用:
<code>$(info xxx={someVariable}) $(info xxx=(someVariable)) #$(info xxx={someVariable}) </code>
都可以打印出对应的变量的值。
echo和print都没用。
转载请注明:在路上 » 【已解决】Makefile中define自定义函数中打印输出没效果