• 示例

    示例

    下面的例子,判断 $(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)