Unix AIX Makefiles中的条件节

Unix AIX Makefiles中的条件节,unix,makefile,aix,multiplatform,Unix,Makefile,Aix,Multiplatform,如何创建一个在AIX、Linux和SunOS上工作并能够为每个环境提供不同编译器选项的makefile 我可以访问一个描述操作系统的环境变量,但AIX make实用程序不喜欢ifeq,因此我无法执行以下操作: ifeq($(OS), AIX) CFLAGS = $(CFLAGS) <IBM compiler options> endif ifeq($(操作系统),AIX) CFLAGS=$(CFLAGS) 恩迪夫 Makefile的可移植性与操作系统没有直接关系,而是与ma

如何创建一个在AIX、Linux和SunOS上工作并能够为每个环境提供不同编译器选项的makefile

我可以访问一个描述操作系统的环境变量,但AIX make实用程序不喜欢ifeq,因此我无法执行以下操作:

ifeq($(OS), AIX)
    CFLAGS = $(CFLAGS) <IBM compiler options>
endif
ifeq($(操作系统),AIX)
CFLAGS=$(CFLAGS)
恩迪夫

Makefile的可移植性与操作系统没有直接关系,而是与make在相关平台上的实现有关。(因此存在一种间接关系,即make的实现可以从操作系统中猜测(但不准确)。一般来说,这是一个难题,已经提出了许多解决方案。您可能希望了解automake,它将为您生成可移植的Make文件。然而,automake针对为不同unixen设置标志的问题的解决方案可能不会吸引您,因为解决方案(基本上)是“不要这样做”。与其根据平台设置选项,不如根据主机或用户在配置时提供的功能确定需要哪些标志。对于基于平台分配标志的问题,一个方便的基于autoconf/automake的解决方案是为每个平台提供一个在配置时分配CFLAG的不同文件,并在运行configure的用户的CONFIG_SITE环境变量中指定该文件。您可以根据平台在用户的登录脚本中分配CONFIG_站点。(即,将问题从配置/制作推到登录设置)这使得分配对构建软件的用户透明。(透明但易于覆盖)。

您可以使用如下构造:

CFLAGS\u AIX=
AIX标志
CFLAGS\u Linux=
Linux标志
CFLAGS\u SunOS=
SunOS标志

CFLAGS=$(CFLAGS_$(OS))

我希望有一个比autoconf/automakey更简单的解决方案。您可以在所有机器上安装一个一致版本的make。我只能控制一些机器,其他人根本无法控制已安装的软件。一些组织对可以安装的内容实施严格的规则,任何创新都可能会在认证等方面花费大量费用。在我的AIX系统上,CFLAGS=$(CFLAGS_$(OS))。