如何通过make文件进行条件构建?

时间:2015-06-08 18:11:21

标签: makefile gnu-make

如何通过将命令行选项传递给make文件来创建选择对象?

我的项目结构如下。

Makefile
src/
include/
test/

主要文件正在测试dir&其他C ++测试代码文件,如abc1.cc abc2.cc等也在测试中。

我想通过将适当的参数传递给make文件,将选择性abcX.cc文件构建到abcX.o文件中。

我不想使用我的make,

$ make ABC1=1 ABC2=1,

并将该ABC变量放入make文件中的ifeq。

像,

ifeq ($(ABC1), 1)
  $(TESTPATH)/abc1.o
endif

有实用的方法吗?

1 个答案:

答案 0 :(得分:0)

如果我正确理解了这个问题,你想创建相同的二进制文件,但是通过提供一个选项来使用不同的源代码。

对于此特定情况,只需使用pattern phony/pseudo-target制作最终目标:

# Create a pattern target, let's give it a name such that
# the pattern is obvious, such as ABC/<num>
.PHONY: ABC/%
ABC/%: main.cc $(TESTPATH)/abc%.cc
     g++ -o modtest $< # etc...

然后使用make ABC/<num>

传递您要构建的任何数字
$ make ABC/1

另一方面,如果你希望生成单独的二进制文件,那就是同样的交易,但让假目标取决于最终的二进制文件。如果模式相同,它可能看起来像这样:

# Trigger the build for modtest-<num> with the target ABC/%
.PHONY: ABC/%
ABC/%: modtest-%

如果从模式到实际目标有更高级的依赖关系,则可以指定将模式映射到您需要的任何变量,例如:使用targetpattern个特定变量:

# Set target specific variables to customize what to be built
ABC/1: OBJECTS=abc1 foo bar
ABC/2: OBJECTS=abc2
ABC/%: OBJECTS=% main
相关问题