将Condition语句与Makefile目标一起使用

时间:2015-05-26 17:49:07

标签: makefile

您好我正在尝试在我的makefile中使用条件语句让它执行不同的make目标,但是它会跳过这个条件并直接转到else。

他是我正在尝试做的一般例子

ifdef ($(RUN_TEST))
all: install run uninstall 
else
all: install uninstall
endif

2 个答案:

答案 0 :(得分:0)

您没有指明运行Makefile的系统,因为可用的make程序略有不同。 Make可以在linux和windows上运行,有不同的版本。

但是,我使用了大多数变体,并且有一种常用的方法可以解决您的问题。您必须意识到makefile不是以传统顺序方式执行的程序。这是将来某些行动的一系列声明或定义。您无法像程序那样以顺序方式阅读它。特别是依赖关系的定义不会被执行,也不能嵌入到语句中,甚至是预处理语句。

实现您希望它将依赖项放在变量中并以条件方式设置该变量的最佳方法,如下所示:

if ($(RUN_TEST))
ALL=install run uninstall
else
ALL=install uninstall
endif

all : $(ALL)

这适用于大多数实现。

答案 1 :(得分:0)

GNU make ifdef operation获取变量的名称进行测试;您正在为它提供变量的扩展。你想这样写:

ifdef RUN_TEST
  ALL = install run uninstall
else
  ALL = install uninstall
endif

通过使用$(RUN_TEST),您实际上正在测试由RUN_TEST扩展命名的变量。例如,如果RUN_TEST设置为true,那么ifdef $(RUN_TEST)实际上会测试是否定义了变量true