2015-11-02 85 views
0

有一个Makefile我只想调整一个变量,然后编译,如果我打电话给一个特定的目标。我有一个可行的解决方案,但它不是一个好的解决方案。如何定义一个变量,然后编译目标[Makefile]

我如何编译:

make 

如何我想改变一个变量:

make debug 

需要做些什么(它是如何工作以某种方式):

debug: 
    @make TAG=debug 

我基本上在一个make过程中调用make来完成工作,但似乎并不正确。我在寻找的东西,如:

debug: 
    TAG=debug 
    jump to first line and do the job 
+1

只要在自己的第一个地方运行'make TAG = debug'? –

+0

,因为没有自动完成,此外我喜欢有调试干净和调试distclean也.... – hr0m

+0

那么,通常的方式会像'make BUILD_TYPE = Debug' – CoffeeandCode

回答

0
TAG=release 

build: 
    @echo $(TAG) 

debug: TAG=debug 
debug: build 

release: build 

用法:

> make 
release 
> make release 
release 
> make debug 
debug 

更新: 在建prerequesites使用TAG

TAG=release 

pre: 
    @echo pre build $(TAG) 

build: pre 
    @echo $(TAG) 

debug: TAG=debug 
debug: build 

release: build 

输出:

~/workspace (master) $ make build 
pre release 
release 
~/workspace (master) $ make debug 
pre debug 
debug 
~/workspace (master) $ make release 
pre release 
release 
+0

这工作只要' TAG'在任何其他目标的先决条件列表中都不需要。 –

+0

@EtanReisner你能解释一下吗?在我的示例中,'TAG'默认设置为'release' –

+0

是的,该值将以先决条件工作。尝试使用'TAG = debug'并在'build'的前提下使用'$(TAG)'。 (请参阅[这个问题](http://stackoverflow.com/q/33135067/258523)上的评论,我对此有所讨论,尽管我的部分在这一点上被删除。) –

相关问题