【背景】
折腾:
期间,需要去判断在makefile中,判断是否是cygwin
最好也要能判断出是否是Linux
【解决过程】
1.关于判断系统类型,之前就在makefile中见到很多个。
2.但是自己没有真正写过。
现在去找找,如何写比较通用,靠谱。
3.自己先去试了试:Administrator@PC-20130611GART /cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.78.1/webhelp
$ uname -r
1.7.24s(0.270/5/3)
Administrator@PC-20130611GART /cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.78.1/webhelp
$ uname -a
CYGWIN_NT-6.1-WOW64 PC-20130611GART 1.7.24s(0.270/5/3) 20130830 16:14:01 i686 Cygwin
Administrator@PC-20130611GART /cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.78.1/webhelp
$ uname
CYGWIN_NT-6.1-WOW64
4.参考:
去试试:Administrator@PC-20130611GART /cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.78.1/webhelp
$ uname -s
CYGWIN_NT-6.1-WOW64
Administrator@PC-20130611GART /cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.78.1/webhelp
$ uname -r
1.7.24s(0.270/5/3)
Administrator@PC-20130611GART /cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.78.1/webhelp
$ uname -m
i686
5.参考:
去试试:Administrator@PC-20130611GART /cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.78.1/webhelp
$ uname -o
Cygwin
6.然后,对于uname的各种参数,还是先要去搞清楚:Administrator@PC-20130611GART /cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.78.1/webhelp
$ uname --help
用法:uname [选项]...
输出一组系统信息。如果不跟随选项,则视为只附加-s 选项。
-a, --all 以如下次序输出所有信息。其中若-p 和
-i 的探测结果不可知则被省略:
-s, --kernel-name 输出内核名称
-n, --nodename 输出网络节点上的主机名
-r, --kernel-release 输出内核发行号
-v, --kernel-version 输出内核版本
-m, --machine 输出主机的硬件架构名称
-p, --processor 输出处理器类型或"unknown"
-i, --hardware-platform 输出硬件平台或"unknown"
-o, --operating-system 输出操作系统名称
--help 显示此帮助信息并退出
--version 显示版本信息并退出
请向bug-coreutils@gnu.org 报告uname 的错误
GNU coreutils 的主页:
GNU 软件一般性帮助:
请向 报告uname 的翻译错误
要获取完整文档,请运行:info coreutils 'uname invocation'
Administrator@PC-20130611GART /cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.78.1/webhelp
$
然后就清楚了:o==operating-system:操作系统类型所以此处是cygwin,是正常的
估计Linux下,输出对应的类型
猜测是Ubuntu输出是Ubuntu
r==kernel-release:内核发行版
m==machine:硬件架构
i==hardware-platform:此处我的cygwin下输出就是:unknown
7.所以,还是-o靠谱,输出是Cygwin。
但是,即使可以确定是Cygwin,但是也最好,先去全部转换为小写的cygwin,然后再去判断和”cygwin”是否相同,
所以要去:
【总结】
然后最后通过:OS_NAME = $(shell uname -o)
LC_OS_NAME = $(shell echo $(OS_NAME) | tr '[A-Z]' '[a-z]')
ifeq ($(LC_OS_NAME), cygwin)
CUR_OS = "current os is cygwin"
else
CUR_OS = "current os not cygwin"
endif
checkos:
echo $(CUR_OS)
实现了,判断出当前os是cygwin还是其他(比如linux):
当然cygwin下,可以判断出来是cygwin:Administrator@PC-20130611GART /cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.78.1/webhelp
$ make checkos
echo "current os is cygwin"
current os is cygwin