2016-01-09 4 views
0

Я хотел бы иметь что-то вроде этого:Makefile целевой глобальной переменной

PrintTarget: 
    @echo Building $(TARGET) 

SetRelTarget: TARGET = Release 
SetRelTarget: 
    @echo Target is set. 

BuildRel: SetRelTarget PrintTarget 

Но TARGET переменная набор в SetRelTargetAs не является глобальным. Мой вопрос:

Можно ли изменить глобальные переменные внутри правила и использовать это измененное значение вне этого правила?

спасибо.

ответ

0

Поскольку нет ничего переменной в коде, вы можете просто сделать это:

TARGET = Release 

PrintTarget: 
    @echo Building $(TARGET) 

BuildRel: PrintTarget 

Демо:

$ make BuildRel 
Building Release 
$ make TARGET=foo BuildRel 
Building foo 

Если случай использования является более сложным, пожалуйста, включают в себя более подробную информацию.

+0

Я хотел бы использовать больше целей и не умножать процедуры Makefile. Предположим, что «PrintTarget» является сложным и длинным, но для разных целей он отличается только переменной '$ (TARGET). – Mikolaj

0

Set TARGET выпустить в BuildRel, то она должна применяться ко всем его предпосылок (хотя это не глобальный),

PrintTarget: 
     @echo Building $(TARGET) 

#SetRelTarget: TARGET = Release 
SetRelTarget: 
     @echo Target is set to $(TARGET). 

BuildRel: TARGET = Release 
BuildRel: SetRelTarget PrintTarget