【问题标题】:How can I pass a variable to a rule in a makefile?如何将变量传递给 makefile 中的规则?
【发布时间】:2020-10-27 13:25:26
【问题描述】:

我在一个目录中有几个项目,我想编写一个 Makefile 来构建任何子集或所有这些项目。每个项目都在一个以其自身命名的文件夹中,其中包含一个 Makefile。

如何执行这些 Makefile?

这是我尝试过的:

# Define the project names
PROJECT_NAMES := \
    Project_1 \
    Project_2 \
    Project_3

# Define default behaviour
default: all

# Rule to build all projects
all:
    $(foreach project, $(PROJECT_NAMES), $(CURRENT_PROJECT))

# Rule to build single project
.PHONY $(CURRENT_PROJECT)
$(CURRENT_PROJECT):
    $(MAKE) -C $(CURRENT_PROJECT) make

我认为这个问题可能已经提出了类似的问题,但没有得到回答: How to make a Makefile call another Makefile rules?

【问题讨论】:

标签: c++ makefile c++14


【解决方案1】:

应该使用先决条件/依赖项,而不是传递参数。以下是我的解决方法:

# Define the project names
PROJECT_NAMES := \
    Project_1 \
    Project_2 \
    Project_3

# Define default behaviour
default: all

# Rule to build all projects now depends on building individual projects
all: $(foreach project, $(PROJECT_NAMES), $(project)_build)

# Rule to build a single project
.PHONY: Project_%
Project_%:
    @echo "****** Building $(subst _build,,$@) ******"
    @$(MAKE) -C $(subst _build,,$@) all

不带参数调用时,会构建所有项目。只需将项目名称传递给 makefile,即可构建单个项目的任何组合,例如:

make Project_1 Project_3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 2021-12-24
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多