如何在Makefile中设置变量而不给出值?

时间:2018-09-07 16:22:02

标签: makefile

#### Makefile.header ####
ifndef Hello
  C_LINK = -switchOne
else
  C_LINK = $(Hello)
endif

#### Makefile ####
...
Hello=
...
include Makefile.header
...

问题>文件Makefile包括文件Makefile.header。我想向用户提供一个选项,以便他们可以自定义C_LINK,禁用默认C_LINK或使用预定义的C_LINK

情况1>自定义开关

用户可以为Hello提供一个值,以自定义C_LINK的值。 例如,

Hello = -abc -def

情况2>使用默认开关

用户可以通过在Makefile中未定义C_LINK变量来使用默认值Hello

情况3>禁用默认开关

用户可以定义没有值的变量Hello来禁用C_LINK。我尝试使用以下方法,但不起作用。

Hello =

编译器将变量Hello视为未定义。

问题>有没有一种方法可以定义具有空值的变量?

谢谢

1 个答案:

答案 0 :(得分:1)

如果您使用的是 GNU Make ,则可以使用?=运算符,如下所示:

Default_Value ?= MainDefault

Value ?= $(Default_Value)

然后在包含的makefile中,可以通过以下不同方式设置选项:

# option #1
Value := -abc -def

# option #2 (do nothing)

#option #3 (clear default) 
Default_Value :=

现在# option #1设置了Value,因此Makefile不会更改它。

此外# option #2也不执行任何操作,因此Makefile将添加其自己的默认值。

然后# option #3将默认值设置为空白,以便Makefile将空白添加到Value