如何制作适用于 AIX、Linux 和 SunOS 并能够为每种环境提供不同编译器选项的 makefile?
我可以访问描述操作系统的环境变量,但是 AIX make 实用程序不喜欢 ifeq,所以我不能执行以下操作:
ifeq($(OS), AIX)
CFLAGS = $(CFLAGS) <IBM compiler options>
endif
如何制作适用于 AIX、Linux 和 SunOS 并能够为每种环境提供不同编译器选项的 makefile?
我可以访问描述操作系统的环境变量,但是 AIX make 实用程序不喜欢 ifeq,所以我不能执行以下操作:
ifeq($(OS), AIX)
CFLAGS = $(CFLAGS) <IBM compiler options>
endif
您可以使用这样的构造:
CFLAGS_AIX =
AIX 标志
CFLAGS_Linux =
Linux 标志
CFLAGS_SunOS =
SunOS 标志
CFLAGS = $(CFLAGS_$(OS))
Makefile 的可移植性与操作系统没有直接关系,而是与相关平台上 make 的实现有关。(因此存在间接关系,即可以从操作系统猜测(但不准确)make 的实现。)一般来说,这是一个难题,已经提出了许多解决方案。您可能想研究一下 automake,它会为您生成可移植的 makefile。但是,automake 为不同 unixen 设置标志的问题的解决方案可能不会吸引您,因为解决方案(基本上)是“不要这样做”。其理念不是基于平台设置选项,而是根据主机或用户在配置时提供的功能确定需要哪些标志。对于基于平台分配标志的问题,一种方便的基于 autoconf/automake 的解决方案是为每个平台创建一个不同的文件,该文件在配置时分配 CFLAGS,并在运行 configure 的用户的 CONFIG_SITE 环境变量中指定该文件. 您可以根据平台在用户的登录脚本中分配CONFIG_SITE。(即,将问题从配置/制作中推到登录设置中)这使得分配对构建软件的用户透明。(透明但容易被覆盖)。您可以根据平台在用户的登录脚本中分配CONFIG_SITE。(即,将问题从配置/制作中推到登录设置中)这使得分配对构建软件的用户透明。(透明但容易被覆盖)。您可以根据平台在用户的登录脚本中分配CONFIG_SITE。(即,将问题从配置/制作中推到登录设置中)这使得分配对构建软件的用户透明。(透明但容易被覆盖)。