2011-02-08 148 views
2

我想概括一个构建系统在几个(有点类似)的平台上编译。什么是确定运行shell脚本或Makefile的主机类型的好方法。我想区分mac和linux,,但也有不同的linux(如RHEL,Ubuntu)的特定发行版。 Cygwin对我来说并不重要,但如果你将它包含在你的回复中,我相信别人会觉得它很有价值。Linux/Mac:编译时确定平台的好方法是什么?

基本原理可能包括使用主机类型来获取并安装正确版本的二进制软件包,这比从源代码编译更方便。另外,一些商业软件是针对特定发行版进行二进制打包的,因此其中一部分动机是抓住正确的二进制文件。

感谢,

的setjmp

+0

如果你必须知道你正在使用的发行版,你的方法有些问题。 – user562374 2011-02-08 20:57:14

+0

@ user562374某些软件是商业和/或打包用于特定发行版。另外 – SetJmp 2011-02-09 18:39:52

回答

2

UNAME -a区分主要* nix的变种

不是很确定什么是最好的方法来区分红帽Ubuntu的距离将是 - 可以寻找包管理工具并查询已安装的软件包,最终帮助您缩小不同的Debian衍生产品等等。但可能有些更明显的事情。

2

linux变体通常将发行版信息存储在/ etc/issue中。

大多数内核将会把信息在/ proc /版本

1

这并不完全明了。您可以使用uname来查找常规参数,但区分分布是一件比较困难的任务。也许你应该考虑使用像autoconf这样的东西来概括你的构建系统?

0

万一你使用Qt,有这非常好的集定义的,Q_OS_ *,是指导你的操作系统,你正在编译于:

Q_OS_AIX 
Q_OS_BSD4 
Q_OS_BSDI 
Q_OS_CYGWIN 
Q_OS_DARWIN 
Q_OS_DGUX 
Q_OS_DYNIX 
Q_OS_FREEBSD 
Q_OS_HPUX 
Q_OS_HURD 
Q_OS_IRIX 
Q_OS_LINUX 
Q_OS_LYNX 
Q_OS_MAC 
Q_OS_MSDOS 
Q_OS_NETBSD 
Q_OS_OS2 
Q_OS_OPENBSD 
Q_OS_OS2EMX 
Q_OS_OSF 
... 

它们在QtGlobal定义。甚至有定义可以帮助你找出使用Q_CC_ *的编译器或者目标窗口系统Q_WS_ *。

但是,如果你不使用Qt并且想要使用通用方法,那么最有可能必须回退到Autotools包或CMake

确定Linux发行版非常棘手,但并不难。您首先必须弄清楚您关心的分布,然后针对您选择的分布进行各种分布特定的文件/配置检查,如this example,因为您无法真正支持所有可用的Linux发行版的。 :-)

至于Mac方面,我会让Mac专家回答,但它不应该那么难,因为至少多元化问题是不可能的。

相关问题