在Makefile使用自定义函数(宏),如何向外传出数值??

autoegg 2006-07-19 04:03:54
各位大侠:
小弟新近学习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))
...全文
785 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jammyxu 2006-08-02
  • 打赏
  • 举报
回复
MYTMP = para1 correct前面有Tab就是執行語句﹐沒看明白執行什么﹐取值是不用執行語句的﹐只執行para1 correct有沒有錯呢﹖

函數要傳回值不可以直接通過參數返回嗎﹖
autoegg 2006-08-01
  • 打赏
  • 举报
回复
没人知道吗?

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧