在Makefile使用自定义函数(宏),如何向外传出数值??
各位大侠:
小弟新近学习Makefile,遇到一个问题。
我在Makefile中自定义了一个函数macro_function,
macro_function中已经接收到参数$1, $2, $3,
但是无法向外界传递数据,比如
MYTMP = para1 correct就会报错,说MYTMP Command not found。
各位大侠,如何在Makefile的自定义函数中向外传出数值?
#########
HEADPATH = include/
CXX = g++
CXXFLAGS = -c -g -Wall -W
CXXFLAGS += -I$(HEADPATH)
SOURCES = $(wildcard src/*.cpp)
OBJ = $(subst .cpp,.o,$(SOURCES))
#OBJ = $(patsubst src/%.cpp,%.o,$(SOURCES))
OBJ_EXP_MAIN = $(subst src/main.o,,$(OBJ))
TARGET = all
LIBNAME = libname.a
HELP_DIR := help/help_message/
HELP_TXT := help.txt
VAR_BEFORE_STRIP := 1 23 chn 100
VAR_AFTER_STRIP := $(strip $(VAR_BEFORE_STRIP))
VAR_FOR_FILTER := file1.c file4.h temp.txt like.o file2.c file3.c file5.h
####### Test Variables Begin #######
variable_static := $(MYTMP)
variable_dynamic = $(MYTMP)
MYTMP = my
MYTMP += new stuff
####### Test Variables End #######
####### Test Macro Begin #######
define my_macro
@echo Run my_macro...
@sleep 1
@echo $(variable_static)
@sleep 1
@echo $(variable_dynamic)
@sleep 1
@echo OK
endef
define help_macro
@echo Create $(HELP_TXT)
@if [ -e $(HELP_TXT) ]; then rm -f $(HELP_TXT); fi
@touch $(HELP_TXT)
@echo Writing $(HELP_TXT)...
@echo This is help message >> $(HELP_TXT)
@sleep 1
@echo $(MAKE_VERSION) $(CURDIR) >> $(HELP_TXT)
@sleep 1
@echo We are learning how to use GNU make >> $(HELP_TXT)
@sleep 1
@echo Section 4.3 Advanced User-Defined Functions >> $(HELP_TXT)
@echo OK
endef
####### Test Macro End #######
####### Test Function Begin #######
ifndef macro_function
define macro_function
@echo This is macro_function
@echo Params are $1 $2 $3
$(if $(filter %06, $1), \
@echo para1 include year, \
@echo para1 not include year)
MYTMP = para1 correct <--------------此句话会报错!!!
endef
endif
####### Test Function End #######
$(TARGET): $(OBJ)
$(CXX) -o $@ $^ -lpthread #-lpthread means link pthread lib
%.o: %.cpp
$(CXX) $(CXXFLAGS) -o $@ $<
lib: $(OBJ_EXP_MAIN)
$(AR) $(ARFLAGS) $(LIBNAME) $^
ranlib $(LIBNAME)
clean:
rm -rf $(OBJ) $(LIBNAME) $(TARGET)
macro:
$(my_macro)
@echo $(VAR_BEFORE_STRIP)
@echo $(VAR_AFTER_STRIP)
.PHONY: help
help:
@if [ ! -d $(HELP_DIR) ]; then mkdir -p $(HELP_DIR); fi
$(help_macro)
@mv $(HELP_TXT) $(HELP_DIR)
func:
$(call macro_function,2006,07,18)
filter:
@echo $(VAR_FOR_FILTER)
@echo $(filter %.c,$(VAR_FOR_FILTER))
@echo $(filter %.h,$(VAR_FOR_FILTER))
小弟新近学习Makefile,遇到一个问题。
我在Makefile中自定义了一个函数macro_function,
macro_function中已经接收到参数$1, $2, $3,
但是无法向外界传递数据,比如
MYTMP = para1 correct就会报错,说MYTMP Command not found。
各位大侠,如何在Makefile的自定义函数中向外传出数值?
#########
HEADPATH = include/
CXX = g++
CXXFLAGS = -c -g -Wall -W
CXXFLAGS += -I$(HEADPATH)
SOURCES = $(wildcard src/*.cpp)
OBJ = $(subst .cpp,.o,$(SOURCES))
#OBJ = $(patsubst src/%.cpp,%.o,$(SOURCES))
OBJ_EXP_MAIN = $(subst src/main.o,,$(OBJ))
TARGET = all
LIBNAME = libname.a
HELP_DIR := help/help_message/
HELP_TXT := help.txt
VAR_BEFORE_STRIP := 1 23 chn 100
VAR_AFTER_STRIP := $(strip $(VAR_BEFORE_STRIP))
VAR_FOR_FILTER := file1.c file4.h temp.txt like.o file2.c file3.c file5.h
####### Test Variables Begin #######
variable_static := $(MYTMP)
variable_dynamic = $(MYTMP)
MYTMP = my
MYTMP += new stuff
####### Test Variables End #######
####### Test Macro Begin #######
define my_macro
@echo Run my_macro...
@sleep 1
@echo $(variable_static)
@sleep 1
@echo $(variable_dynamic)
@sleep 1
@echo OK
endef
define help_macro
@echo Create $(HELP_TXT)
@if [ -e $(HELP_TXT) ]; then rm -f $(HELP_TXT); fi
@touch $(HELP_TXT)
@echo Writing $(HELP_TXT)...
@echo This is help message >> $(HELP_TXT)
@sleep 1
@echo $(MAKE_VERSION) $(CURDIR) >> $(HELP_TXT)
@sleep 1
@echo We are learning how to use GNU make >> $(HELP_TXT)
@sleep 1
@echo Section 4.3 Advanced User-Defined Functions >> $(HELP_TXT)
@echo OK
endef
####### Test Macro End #######
####### Test Function Begin #######
ifndef macro_function
define macro_function
@echo This is macro_function
@echo Params are $1 $2 $3
$(if $(filter %06, $1), \
@echo para1 include year, \
@echo para1 not include year)
MYTMP = para1 correct <--------------此句话会报错!!!
endef
endif
####### Test Function End #######
$(TARGET): $(OBJ)
$(CXX) -o $@ $^ -lpthread #-lpthread means link pthread lib
%.o: %.cpp
$(CXX) $(CXXFLAGS) -o $@ $<
lib: $(OBJ_EXP_MAIN)
$(AR) $(ARFLAGS) $(LIBNAME) $^
ranlib $(LIBNAME)
clean:
rm -rf $(OBJ) $(LIBNAME) $(TARGET)
macro:
$(my_macro)
@echo $(VAR_BEFORE_STRIP)
@echo $(VAR_AFTER_STRIP)
.PHONY: help
help:
@if [ ! -d $(HELP_DIR) ]; then mkdir -p $(HELP_DIR); fi
$(help_macro)
@mv $(HELP_TXT) $(HELP_DIR)
func:
$(call macro_function,2006,07,18)
filter:
@echo $(VAR_FOR_FILTER)
@echo $(filter %.c,$(VAR_FOR_FILTER))
@echo $(filter %.h,$(VAR_FOR_FILTER))
...全文
相关推荐
Win平台下Makefile使用说明
在“Win平台下Makefile的基本规则(一).pdf”中,你可以找到关于Makefile基本结构和命令的详细解释;“Win平台下Makefile推理规则(三).pdf”可能深入讨论了自定义和使用Makefile
makefile变量使用及其条件判断
【Makefile 变量使用】在 Makefile 编程中,变量扮演着至关重要的角色,它们可以存储文本字符串,类似于 C/C++ 中的宏。
makefile详解 使用变量和函数
函数是 Makefile 中另一个重要的概念,它可以被认为是一种宏,代表着一个命令序列。在 Makefile 中,我们可以使用函数来简化编译过程和提高效率。
Windows 下的 Makefile 编写(二)宏和预处理的简单示例
### 宏在Makefile中的应用宏在Makefile中主要用于存储常量或表达式,以便在文件的其他部分重复使用。宏的定义遵循特定的语法结构,由宏名和宏体组成。
Makefile规则、Makefile规则、Makefile的条件执行、Makefile函数、Makefile库的生成和使用
Makefile 函数 Makefile 支持一些内置函数,如`$(shell command)`执行shell命令,`$(patsubst pattern,replacement,text)`替换文本模式



