我想概括一个构build系统在几个(有点类似)的平台上编译。 什么是确定运行shell脚本或Makefile的主机types的好方法。 我想区分Mac和Linux, 但也不同的具体分配的Linux (如RHEL,Ubuntu)。 Cygwin对我来说并不重要,但是如果你把它包含在你的回复中,我相信别人会觉得它很有价值。
基本原理可能包括使用主机types来获取和安装正确版本的二进制包,比从源代码编译更方便。 另外,一些商业软件是针对特定发行版本进行二进制打包的,因此部分动机是抓取正确的二进制文件。
谢谢,
那么setjmp
Autotools来拯救。 它有大量的宏帮助你做这种东西。
uname -a区分主要* nix变体
不太确定区分红帽与Ubuntu的最好方法是 – 可以查找软件包管理工具并查询已安装的软件包,最终帮助您缩小不同的debian衍生产品等等。
Linux变体通常将发行版信息存储在/ etc / issue中。
大多数内核将把信息放在/ proc / version中
这并不完全简单。 您可以使用uname
来查找常规参数,但区分分布是一件比较困难的任务。 也许你应该考虑使用类似autoconf来概括你的构建系统?
为了防止你使用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发行版相当棘手,但并不难。 你首先必须弄清楚你关心的是什么样的发行版,然后在这个例子中为你选择的那个发行特定的文件/配置检查,因为你不能真正支持所有可用的Linux发行版出来了。 🙂
至于Mac方面,我会让Mac专家回答,但不应该那么难,因为至少多元化问题是不可能的。