示例

下面的例子,判断 $(CC) 变量是否 gcc ,如果是的话,则使用GNU函数编译目标。

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

可见,在上面示例的这个规则中,目标 foo 可以根据变量 $(CC) 值来选取不同的函数库来编译程序。

我们可以从上面的示例中看到三个关键字: ifeqelseendififeq 的意思表示条件语句的开始,并指定一个条件表达式,表达式包含两个参数,以逗号分隔,表达式以圆括号括起。 else 表示条件表达式为假的情况。 endif 表示一个条件语句的结束,任何一个条件表达式都应该以 endif 结束。

当我们的变量 $(CC) 值是 gcc 时,目标 foo 的规则是:

  1. foo: $(objects)
  2. $(CC) -o foo $(objects) $(libs_for_gcc)

而当我们的变量 $(CC) 值不是 gcc 时(比如 cc ),目标 foo 的规则是:

  1. foo: $(objects)
  2. $(CC) -o foo $(objects) $(normal_libs)

当然,我们还可以把上面的那个例子写得更简洁一些:

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