折腾:
【已解决】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自定义函数中打印输出没效果