代码之家  ›  专栏  ›  技术社区  ›  frankster

AIX makefiles中的条件节

  •  3
  • frankster  · 技术社区  · 15 年前

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

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

    ifeq($(OS), AIX)
        CFLAGS = $(CFLAGS) <IBM compiler options>
    endif
    
    2 回复  |  直到 14 年前
        1
  •  7
  •   mark4o    14 年前

    您可以使用这样的构造:

    CFLAGS_AIX = AIX标志
    CFLAGS_Linux = Linux标志
    CFLAGS_SunOS = 苏诺斯旗帜
    CFLAGS = $(CFLAGS_$(OS))

        2
  •  1
  •   William Pursell    15 年前

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