在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))