根据环境变量的值调用某些make目标的正确方法?

时间:2010-10-28 09:13:40

标签: makefile aix

我应该使用make(在AIX上)创建我们应用程序的几个包 包的内容应根据一个环境变量而有所不同 有点像 - 如果环境变量 WITH_CPP 设置为“Y”那么应该构建应用程序的c ++部分并将其打包到安装包中。
如果环境变量 WITH_CPP 设置为“N”,则不应构建应用程序的c ++部分并将其打包到安装包中。
在makefile中处理这些条件的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

假设目标是installation-package,并且包含程序包的c ++部分的方法是将c ++对象添加到安装包的对象列表中:

ifeq ($(WITH_CPP),Y)
  INSTALLATION_OBJECTS += $(CPP_OBJECTS)
endif

或者,如果包含c ++部分的方法是通过构建单独的目标:

ifeq ($(WITH_CPP),Y)
  installation-package: cpp-part
endif

这些是很好的方法,但它可能是一件坏事。如果makefile的行为依赖于环境变量,那么同一个makefile会为不同的用户提供不同的结果,这可能会令人头疼。

答案 1 :(得分:0)

另一种方法是让你的软件包的C ++部分依赖于某些虚假的目标:

cxx: cxx-part-1 cxx-part-2
.PHONY: cxx

然后,测试(但不依赖)正在构建的包的各种c ++部分的存在,并在它们存在时安装它们。这是可行的,但这是一个非常糟糕的主意,因为依赖图现在必然是不完整的。这也意味着最终用户必须知道运行make && make cxx && sudo make install或类似的。只需使用autoconfautomake从构建步骤中拆分配置步骤。