2014-01-26 2 views
0

я могу сделать:Как передать все аргументы командной строки программе в Makefile?

all: 
    $(CC) -DFOO=$(FOO) -DBAR=$(BAR) main.c 

И назвать его:

make FOO=foo BAR=bar 

Но я хочу более общее решение таким образом, что я не придется писать все возможные переменные в вызове компилятора линия. Я знаю, например, что переменная MAKECMDGOALS имеет все цели из командной строки. Есть ли какая-либо переменная MAKECMDVARS, содержащая все переменные из командной строки? Поэтому я мог бы сделать что-то вроде этого:

CONFIGS = $(addprefix -D, $(MAKECMDVARS)) 

all: 
    $(CC) $(CONFIGS) main.c 
+0

Как вы хотите, чтобы отличить цели от переменных? То есть, если вы вызываете 'make foo bar', нужно попробовать * построить *' foo' и 'bar' или поместить эти имена в' MAKECMDVARS'? – Beta

+0

@Beta, я рассматриваю переменную что-то вроде 'foo = bar'. Таким образом, 'make foo bar' должен построить' foo' и 'bar'. И 'make FOO = foo BAR = bar baz' должен положить' FOO = foo BAR = bar' в 'MAKECMDVARS' и построить' baz'. – borges

+0

Почему бы не сделать CFLAGS = '- DFOO = foo -DBAR = bar' baz'? – Beta

ответ

1

По-моему, это плохая идея. Это разобьет понимание того, как делать работы, и это будет означать, что вы не можете использовать переменные переопределения по назначению. Что делать, если вы хотите изменить CC только для одной сборки с использованием make? Или CFLAGS? Или какая-то другая переменная?

Однако, если вы действительно хотите сделать это вы можете: все переменные, назначенные в командной строке помещаются в -*-command-variables-*- переменной:

$ echo 'all: ; @echo variables: $(-*-command-variables-*-)' | make -f- 
variables: 

$ echo 'all: ; @echo variables: $(-*-command-variables-*-)' | make -f- FOO=foo BAR=bar 
variables: BAR=bar FOO=foo 
+0

Я понимаю. Спасибо за объяснение. Я сделаю это временным, пока не смогу развернуть правильную систему сборки autotools. – borges

Смежные вопросы