是否有gnu make的配置文件?

时间:2011-05-18 19:49:30

标签: makefile gnu-make

我想告诉make它应该总是使用-j4选项,即使我没有用命令行指定它。通常我会在某个配置文件中执行此操作(即~/.makerc)。

gnu make是否存在此类文件?

5 个答案:

答案 0 :(得分:8)

阅读$(MAKEFLAGS) variable

export MAKEFLAGS=j4

然而,这可能会干扰基于递归制作的构建(并不是说明智的人正在使用递归make!),干扰了GNU make与其子品牌进行通信的能力。

因此,更明智的方法可能是包装脚本或别名或shell函数。

答案 1 :(得分:2)

嗯,是和否 - 通常你会使用include file.将常用配置项放在一个文件中,比如common.mk并添加

include common.mk

位于makefile的顶部。如果该标志没有匹配的方法来从make文件中配置它,则可以使用函数

function mk {
    make -j4 $*
}

答案 2 :(得分:1)

它不存在,但您可以通过对make进行递归调用来实现此目的。

例如:


<强>生成文件:

-include $(HOME)/.makerc

.DEFAULT_GOAL: all

# This will handle a default goal if make is just called without any target
all:
    $(MAKE) $(MAKE_OPTIONS) -f Makefile.real $(MAKECMDGOALS)

# This handles all targets and passes it through
%:
    $(MAKE) $(MAKE_OPTIONS) -f Makefile.real $(MAKECMDGOALS)


<强> $(HOME)/ makerc:

MAKE_OPTIONS := -j4

答案 3 :(得分:0)

我想对John Marshall的回答中提出的解决方案进行一些扩展。

您可以简单地在$PATH中的某个地方放置一行包装脚本,其中包含以下内容:

#!/bin/bash
$(type -ap make | sed -n 2p) -j4 "$@"

(脚本不必命名为make,这会使它更简单,但如果是这样的话,我觉得很方便。)

我认为这比其他方法更好,原因如下:

  • MAKEFLAGS方法不同,它不会破坏递归构建(实际上这在我的经验中很常见)。
  • include .makerc方法不同,它可以在本地应用,而无需以任何方式更改任何现有的makefile或您的工作流程。
  • 与shell别名或函数方法不同,它与shell无关(不会将您绑定到任何特定的shell)并且可以在您可能必须使用的任何其他构建脚本中工作,只要您启动它们在同样的环境中。

答案 4 :(得分:0)

我喜欢John Marshall建议的parseImages方法来代替MAKEFLAGS,它支持类似.makerc项目自动配置文件的功能。但是,我不想记住必须事先提供.env或类似的环境变量(之后再取消设置)。

对此的一种解决方案是将make分配放在MAKEFLAGS本身的顶部:

Makefile

运行它:

#!/usr/bin/env make

MAKEFLAGS=s

.PHONY: foo
foo:
    echo "hello, make"

与没有$ make foo hello, make 行的情况相比:

MAKEFLAGS=...