【背景】
折腾:
期间,需要去判断在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 显示版本信息并退出 请向[email protected] 报告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系统