如何让gnu make表现得好像命令行中的默认选项一样?

时间:2010-10-02 03:04:59

标签: makefile

我正在使用makefile,如果我在命令行中传递选项,如

make OPT1=opt1 OPT1=2

我得到的行为与编辑Makefile并写入

的行为不同
OPT1=opt1
OPT2=opt2

然后再运行

make

在命令行上。

我想要的行为就是我在命令行中使用选项的行为。现在我正在使用别名,但我很想知道这是否可以仅使用Makefile完成。

感谢。

2 个答案:

答案 0 :(得分:1)

您的make文件是否对这些变量使用origin命令来决定是否覆盖它们?这将返回变量的原点,例如, “环境”或“命令行”,也许makefile被编写为在这些情况下做一些不同的事情。

答案 1 :(得分:1)

我最终解决这个问题的方法如下:

mv Makefile Makefile.aux

然后使用内容

创建一个现在的Makefile
OPT1=true
OPT2=false

DEFAULT_OPTS=--no-print-directory OPT1=$(OPT1) OPT2=$(OPT2)

.PHONY : $(MAKECMDGOALS)
$(MAKECMDGOALS):
        $(MAKE) -f Makefile.aux $(DEFAULT_OPTS) $(MAKEFLAGS) $(MAKECMDGOALS)

.PHONY: all
all:
        $(MAKE) -f Makefile.aux $(DEFAULT_OPTS) $(MAKEFLAGS) $(MAKECMDGOALS)

我使用--no-print-directory的原因是因为如果我在没有此选项的情况下使用此方法,它将在编译结束时和编译结束时打印一条额外的消息。