Chinaunix首页 | 论坛 | 博客
  • 博客访问: 174586
  • 博文数量: 89
  • 博客积分: 30
  • 博客等级: 民兵
  • 技术积分: 565
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-24 10:16
文章分类

全部博文(89)

文章存档

2013年(1)

2012年(1)

2011年(8)

2010年(45)

2009年(34)

我的朋友

分类: C/C++

2010-04-01 18:28:20

如何判断当前是什么操作系统?
 
#if defined(_AIX)       // IBM AIX
    ... ...
#endif

#if defined(__sun)      // SUN OS
    ... ...   
#endif
 
 
linux下定义了 "linux", Sco Openserver下定义了unix
 
上面的方法有时候不是很确定,也不好自己掌握和控制,下面探讨一下另一个方法:
在UNIX下有一个uname的命令,在不同的操作系统下有不同的返回, 例如:
SCO: SCO_SV
Linux: Linux
AIX: AIX
Unixware: UnixWare
 
可以在makefile文件中增加如下句子来判断当前的操作系统类型,和编译选择:
 
OSTYPE=`uname`
CFLAGS_SCO = -D SCO_SV
CFLAGS_LINUX = -D AIX
 
prog:
     @if [ "$(OSTYPE)" = 'SCO_SV' ];then make prog1;else make prog2;fi
 
 
prog1:
     $(CC) -o tt tt.c $(CFLAGS_SCO)
 
prog2:
     $(CC) -o tt2 tt2.c $(CFLAGS_AIX)
 
如上在编译命令行中增加-D SCO_SV的定义, 程序的源代码中可以如下使用:
#ifdef SCO_SV
typedef unsigned int socklen_t;
#endif
如此,源代码就很容易的适应不同的操作系统了。
 
 
 
 
阅读(592) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~