【背景】
折腾:
期间,需要去判断在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.参考:
Re: Newbie question – testing for OS. . .
去试试:
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.参考:
Re: check if cygwin in makefiles?
去试试:
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 的主页:<http://www.gnu.org/software/coreutils/>
GNU 软件一般性帮助:<http://www.gnu.org/gethelp/>
请向<http://translationproject.org/team/zh_CN.html> 报告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
转载请注明:在路上 » 【已解决】在makefile中判断是cygwin还是Linux系统