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