双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

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

autoegg autoegg 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
各位大侠:
小弟新近学习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))
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
autoegg
Linux/Unix社区 23,224 成员 74,535 内容