条件指令

条件指令是 -

  • ifeq (if eqaul)指令。它包含两个参数,用逗号分隔并用圆括号包围。变量替换在两个参数上执行,然后进行比较。如果两个参数匹配,则遵循 ifeq 后面的命令行;否则会被忽略。

  • ifneq (if not eqaul)指令。它包含两个参数,用逗号分隔并用圆括号包围。变量替换在两个参数上执行,然后进行比较。如果两个参数不匹配,则遵循ifneq后面的makefile行;否则会被忽略。

  • ifdef (if defined)指令。它包含单个参数。如果给定的参数为真,则条件成立。

  • ifndef (if not defined)指令。它包含单个参数。如果给定的参数为假,则条件成立。

  • else 指令导致如果之前的条件没有被遵守以下行。在上面的例子中,这意味着每当没有使用第一个替代方案时,就会使用第二个替代链接命令。在条件中有其他选项是可选的。

  • endif 指令结束的语句,每个 if 条件必须以 endif 结尾。

条件指令的语法

最简单条件的语法如下 -

  1. conditional-directive
  2. text-if-true
  3. endif

text-if-true 可以是任何文本行,如果条件为真,则被视为 Makefile 的一部分。如果条件假,则不使用该内容。

复杂一点条件的语法如下 -

  1. conditional-directive
  2. text-if-true
  3. else
  4. text-if-false
  5. endif

如果条件为真,则使用 text-if-true; 否则,使用 text-if-false。text-if-false 可以是任意数量的文本行。

无论条件简单还是复杂,条件指令的语法都是相同的。有四种不同的指令来测试各种条件。他们如同给出的 -

  1. ifeq (arg1, arg2)
  2. ifeq `arg1` `arg2`
  3. ifeq "arg1" "arg2"
  4. ifeq "arg1" `arg2`
  5. ifeq `arg1` "arg2"

以上条件的相反指令如下 -

  1. ifneq (arg1, arg2)
  2. ifneq `arg1` `arg2`
  3. ifneq "arg1" "arg2"
  4. ifneq "arg1" `arg2`
  5. ifneq `arg1` "arg2"

条件指令示例

  1. libs_for_gcc = -lgnu
  2. normal_libs =
  3. foo: $(objects)
  4. ifeq ($(CC) ,gcc)
  5. $(CC) -o foo $(objects) $(libs_for_gcc)
  6. else
  7. $(CC) -o foo $(objects) $(normal_libs)
  8. endif