【问题标题】:variable to switch the pre-requisites for a target in a Makefile用于切换 Makefile 中目标的先决条件的变量
【发布时间】:2020-06-09 13:17:44
【问题描述】:

我希望使用“MY_TYPE”来切换目标“top”的先决条件。

基于 MY_TYPE 我可以选择所需的先决条件

例如,对于

MY_TYPE=FOO ,我希望 $(BUILD) $(TARGETS) $(X_LOCALS) 作为 top 的先决条件

MY_TYPE=BAR,我希望 $(BUILD) $(TARGETS) $(Y_LOCALS) 作为 top 的先决条件

我怎样才能实现它?

下面是一个简单的代码sn-p。

BUILD = build
TARGETS = targets
XLOCALS = xlocals
YLOCALS = ylocals

# can be FOO or BAR
MY_TYPE ?= FOO

$(BUILD):
    printf "\t Doing Build\n"

$(TARGETS): 
    printf "\t Doing target\n"

$(XLOCALS):
    printf "\t my local build for X \n"

$(YLOCALS):
    printf "\t my local build for Y \n"


# based on MY_TYPE Can I select the pre-requisites required
# For example, for 
# MY_TYPE=FOO , I wish to have  $(BUILD) $(TARGETS) $(X_LOCALS) as pre-requisites for 'top' target
# MY_TYPE=BAR , I wish to have  $(BUILD) $(TARGETS) $(Y_LOCALS) as pre-requisites for 'top' target
# How can I achieve it .

top: $(BUILD) $(TARGETS) $(XLOCALS)
    printf "\t doing top\n"

很高兴听取您的意见。

【问题讨论】:

    标签: linux makefile gnu-make


    【解决方案1】:

    没有什么比这更简单的了,只需使用conditionals

    ifeq ($(MY_TYPE),FOO)
    top: $(X_LOCALS)
    endif
    
    ifeq ($(MY_TYPE),BAR)
    top: $(Y_LOCALS)
    endif
    
    top: $(BUILD) $(TARGETS)
            @echo prereqs are $^
    

    【讨论】:

    • 嗨 Beta,我厌倦了您对代码 sn-p 的建议。我仍然无法获取目标顶部调用的 XLOCAL 或 YLOCAL。
    • @user2532296:我无法重现您的错误。当我将条件放入您的 makefile(并更正 X_LOCALS=>XLOCALS)和 make top 时,它可以完美运行。我将发布一个完整的示例,您可以尝试...
    • 当然,您发布后我可以尝试该示例。谢谢。
    • 谢谢,制表符间距有问题。
    猜你喜欢
    • 2010-11-23
    • 2014-05-05
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多