GNU Makefile中的条件控制结构
在常见的编程语言中,使用条件控制结构诸如if ... else if ... else...是很寻常的事情,那么在GNU Makefile中如何使用呢?
- ifeq
- ifneq
例如:foo.sh
#!/bin/bash ARCH=$(uname -p)
if [[ $ARCH == "x86_64" ]]; then
ARCH32="i686"
ARCH64="x86_64"
elif [[ $ARCH == "ppc64le" ]]; then
ARCH32=""
ARCH64="ppc64le"
else
ARCH32=$ARCH
ARCH64=""
fi if [[ -n $ARCH32 ]]; then
OUTPUT+=" ARCH32=$ARCH32"
fi if [[ -n $ARCH64 ]]; then
OUTPUT+=" ARCH64=$ARCH64"
fi echo $OUTPUT
将上述的foo.sh用Makefile实现就是:
ARCH = $(shell uname -p) ifeq ($(ARCH), x86_64)
ARCH32 = i686
ARCH64 = x86_64
else ifeq ($(ARCH), ppc64le)
ARCH32 =
ARCH64 = ppc64le
else
ARCH32 = $(ARCH)
ARCH64 =
endif ifneq ($(ARCH32), )
OUTPUT += ARCH32=$(ARCH32)
endif ifneq ($(ARCH64), )
OUTPUT += ARCH64=$(ARCH64)
endif all: foo
foo:
@echo $(OUTPUT)
运行foo.sh 和 Makefile 结果如下:
$ uname -p
x86_64
$ bash foo.sh
ARCH32=i686 ARCH64=x86_64
$ make -f Makefile
ARCH32=i686 ARCH64=x86_64
由此可见,
- ifeq($(VAR), ) 等价于bash中的 [[ -z $VAR ]]
- ifneq($(VAR), ) 等价于bash中的 [[ -n $VAR ]]
那么,在GNU Makefile中使用条件控制结构有什么用?很简单,对不同的平台提供不同的编译选项或者安装包支持。例如:
- 一个针对不同的平台提供不同的安装包的Makefile
ARCH = $(shell uname -p) ifeq ($(ARCH), x86_64)
ARCH32 = i686
ARCH64 = x86_64
else ifeq ($(ARCH), ppc64)
ARCH32 =
ARCH64 = ppc64
else ifeq ($(ARCH), ppc64le)
ARCH32 =
ARCH64 = ppc64le
else ifeq ($(ARCH), s390x)
ARCH32 =
ARCH64 = s390x
else ifeq ($(ARCH), aarch64)
ARCH32 =
ARCH64 = aarch64
else
ARCH32 = $(ARCH)
ARCH64 =
endif ifneq ($(ARCH32), )
CPKGS32 = libgcc.$(ARCH32)
CPKGS32 += glibc.$(ARCH32)
endif
ifneq ($(ARCH64), )
CPKGS64 = libgcc.$(ARCH64)
CPKGS64 += glibc.$(ARCH64)
endif
CPKGS = $(CPKGS32) $(CPKGS64) all: foo
foo:
@echo $(CPKGS)
参考资料:
GNU Makefile中的条件控制结构的更多相关文章
- Makefile 中:= ?= += =的差别 和条件运行
一:在Makefile中常常看到obj-m := scull.o和KERNELDIR ?= /lib/modules/等不同的赋值方式,如今总结他们的差别: = 是最主要的赋值 := 是覆盖之前 ...
- Makefile中的ifeq 多条件使用
Makefile中的ifeq 多条件使用 网上关于makefile中ifeq的介绍已经很多了,为什么我还要在写这篇文章,因为他们只说了if else两种条件的情况,并没有讲多于两种条件情况的使用. 多 ...
- GNU linux 中makefile那点事
转自陈皓: http://bbs.chinaunix.net/viewthread.php?tid=408225 概述—— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为 ...
- Makefile中支持的函数大全
一.描述 Makefile的函数调用,很像变量的使用,也是以"$"来标识的,其语法如下: $(<function> <arguments> ) 或是 ${& ...
- makefile中的自动化变量$@,$%,$
转自:http://www.2cto.com/os/201302/191344.html makefile中的自动化变量$@,$%,$ 自动化变量 模式规则中,规则的目标和依赖文件名代表了一 ...
- makefile 中 $@ $^ %< 使用【转】
转自:http://blog.csdn.net/kesaihao862/article/details/7332528 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 ...
- makefile中的自动化变量 【转】
转自:http://blog.chinaunix.net/uid-28458801-id-3495215.html 自动化变量 模式规则中,规则的目标和依赖文件名代表了一类文件名:规则的命令是对所有这 ...
- Makefile中指示符“include”、“-include”和“sinclude”的区别
转:http://www.cnblogs.com/xmphoenix/archive/2012/02/22/2363335.html 指示符“include”.“-include”和“sinclude ...
- makefile 中 $@ $^ %< 使用
这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 源程序编译 Makefile的编写 程序库的链接 程序的调试 头文件和系统求助 1.源程序的编译 在L ...
随机推荐
- Winform中设置ZedGraph鼠标双击获取距离最近曲线上的点的坐标值
场景 WInforn中设置ZedGraph的焦点显示坐标格式化以及显示三个坐标数的解决办法: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...
- php 除10取整,取十位数前面一个数字,百位前两个数字
需求:php 除10取整,取十位数前面一个数字,百位前两个数字,并把大于2的加红显示 例:0-9,10-19,20-29,30-39,110-119对应为:0 1 2 3 11 实现主要方法:$num ...
- 单词chalchiguite硬玉chalchiguite英语
翡翠在我国明确地称为硬玉(chalchiguite) ,可能始于宋代.19世纪后半叶,法国矿物学家德穆尔将中国的“玉”分为软玉和硬玉(见地质情报所:<翡翠冲的<国外地质科技>,198 ...
- JDBC及C3P0常用类
JDBC(Java Database Connectivity)JAVA数据库连接,它是一套用于执行SQL语句的Java API.JDBC可以通过不同驱动与不同数据库连接,相当于JAVA和数据库之间的 ...
- DV型、OV型、EV型证书的主要区别
DV型和OV型证书的区别 DV和OV型证书最大的差别是:DV型证书不包含企业名称信息:而OV型证书包含企业名称信息,以下是两者差别对比表: DV OV 包含企业名称信息 否 是 验证公司名称 ...
- Linux创建高级用户并删除
Linux创建高级用户并删除 常见window系统可以创建许多用户,但是linux也可以创建许多用户. 方法比window方便简单. (1)添加一个普通用户 :nangong(名字自己取) usera ...
- UiPath:Delay延迟执行,解决UiPath自动输入值不完整问题
学习过程中出现点击按钮后,由于网页弹出框显示速度慢,造成输入值遗漏或者根本就没有输入问题. 查阅了一下,目前解决方法是在点击按钮后加一段延迟时间,等待他显示完整在输入值.如图 时间格式以秒为单位 00 ...
- Shiro密码加密
Shiro密码加密 相关类 org.apache.shiro.authc.credential.CredentialsMatcher org.apache.shiro.authc.credential ...
- Python-numpy包中多维数组转置,transpose.swapaxes的轴编号(axis)的理解
transpose()中三个轴编号的位置变化理解 transpose(a,b,c)其中a轴编号即为参考编号,垂直于a的平面即为所有平面,该平面上的数据再根据b,c相对于(0,1,2)的位置关系进行改变 ...
- LG4035/BZOJ1013 「JSOI2008」球形空间产生器 高斯消元
问题描述 LG4035 BZOJ1013 题解 设答案为\((p_1,p_2,p_3,...,p_n)\) 因为是一个球体,令其半径为\(r\),则有 \[\sum_{i=1}^{n}{(a_i-p_ ...