Makefile--使用条件判断
发布日期:2021-05-24 22:26:46 浏览次数:19 分类:精选文章

本文共 1195 字,大约阅读时间需要 3 分钟。

使用条件判断可以让 Make 根据运行时的不同情况选择不同的执行分支。条件表达式可以比较变量的值或变量与常量的值,从而决定要执行的规则分支。下面将详细介绍如何使用条件判断,并通过实际示例展示其应用。

示例

以下示例展示了如何根据变量 $(CC) 的值来选择不同的函数库进行编译。我们使用 ifeqelseendif 关键字来构建条件语句。

libs_for_gcc = -lgnunormal_libs = fooifeq ($(CC),gcc)    $(CC) -o foo $(objects) $(libs_for_gcc)else    $(CC) -o foo $(objects) $(normal_libs)endiflibs_for_gcc = -lgnunormal_libs = fooifeq ($(CC),gcc)    libs = $(libs_for_gcc)else    libs = $(normal_libs)endiffoo: $(objects)    $(CC) -o foo $(objects) $(libs)

当变量 $(CC) 的值为 "gcc" 时,目标 "foo" 会使用 gcc 编译所选的库。如果 $(CC) 的值不是 "gcc"(例如为 "cc"), 那么目标 "foo" 会使用默认的库进行编译。

语法

Make 提供了四个条件关键字:ifeqifneqifdefifndef。每个关键字都接受一对参数进行比较,并根据比较结果决定要执行的规则分支。

  • ifeq:比较两个参数是否相等。如果两个参数相等,则执行真分支,否则执行假分支。

    ifeq ($(strip $(foo)),)

    如果 $(foo) 减去空格后是空值,则执行真分支。

  • ifneq:比较两个参数是否不相等。如果两个参数不相等,则执行真分支。

    ifneq ($(strip $(foo)),)
  • ifdef:检查变量是否为非空值。如果变量存在且不为空,则执行真分支。

    ifdef $(NAME)    # 做一些事

    变量 $(NAME) 存在且不为空时,执行真分支。

  • ifndef:检查变量是否为空值。与 ifdef 相反。

    ifndef $(NAME)    # 做一些事

    变量 $(NAME) 为空或不存在时,执行真分支。

  • 注意事项

    • 条件表达式中的参数可以是变量或函数的返回值。
    • Make 在读取 Makefile 时就计算条件表达式的值,因此不建议在条件语句中使用自动化变量(如 $@)。
    • 条件语句不应以制表符(Tab)开头,以避免被解析为命令。
    • 条件语句中可以包含注释符 #,但注释不会被解析为命令。

    通过合理使用条件判断,可以让 Makefile 根据不同的编译器(如 gcccc)选择相应的编译选项,从而灵活地管理项目编译流程。

    上一篇:Makefile--使用函数
    下一篇:Makefile--使用变量

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2025年04月24日 06时30分59秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章