
Makefile--使用条件判断
发布日期:2021-05-24 22:26:46
浏览次数:19
分类:精选文章
本文共 1195 字,大约阅读时间需要 3 分钟。
使用条件判断可以让 Make 根据运行时的不同情况选择不同的执行分支。条件表达式可以比较变量的值或变量与常量的值,从而决定要执行的规则分支。下面将详细介绍如何使用条件判断,并通过实际示例展示其应用。
示例
以下示例展示了如何根据变量 $(CC) 的值来选择不同的函数库进行编译。我们使用 ifeq
、else
和 endif
关键字来构建条件语句。
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 提供了四个条件关键字:ifeq
、ifneq
、ifdef
和 ifndef
。每个关键字都接受一对参数进行比较,并根据比较结果决定要执行的规则分支。
ifeq
:比较两个参数是否相等。如果两个参数相等,则执行真分支,否则执行假分支。
ifeq ($(strip $(foo)),)
如果 $(foo) 减去空格后是空值,则执行真分支。
ifneq
:比较两个参数是否不相等。如果两个参数不相等,则执行真分支。
ifneq ($(strip $(foo)),)
ifdef
:检查变量是否为非空值。如果变量存在且不为空,则执行真分支。
ifdef $(NAME) # 做一些事
变量 $(NAME) 存在且不为空时,执行真分支。
ifndef
:检查变量是否为空值。与 ifdef
相反。
ifndef $(NAME) # 做一些事
变量 $(NAME) 为空或不存在时,执行真分支。
注意事项
- 条件表达式中的参数可以是变量或函数的返回值。
- Make 在读取 Makefile 时就计算条件表达式的值,因此不建议在条件语句中使用自动化变量(如
$@
)。 - 条件语句不应以制表符(Tab)开头,以避免被解析为命令。
- 条件语句中可以包含注释符
#
,但注释不会被解析为命令。
通过合理使用条件判断,可以让 Makefile 根据不同的编译器(如 gcc
或 cc
)选择相应的编译选项,从而灵活地管理项目编译流程。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月24日 06时30分59秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
wordpress架站踩坑过程
2019-03-21
一个简单的游戏框架[汇总]
2019-03-21
免费好用的证件扫描仪-扫描全能王
2019-03-21
面试题5:(事务管理) ACID 是什么?
2019-03-21
10.Mybatis执行流程
2019-03-21
SpringMvc前台传Date类型到后台报400错误。
2019-03-21
Http状态码
2019-03-21
通信过程图
2019-03-21
maven核心
2019-03-21
使用maven
2019-03-21
依赖范围scope
2019-03-21
apache服务器 vs Tomcat服务器
2019-03-21
springboot:集成 Jsp
2019-03-21
Python:简介
2019-03-21
python:input
2019-03-21
python:字符串
2019-03-21
cobaltstrike生成一个原生c,然后利用xor加密解密执行
2019-03-21
HTML中如何给HTML元素添加事件
2019-03-21
IDEA springMVC不报错出现访问404问题
2019-03-21
Redis概述和基础
2019-03-21