2016-12-20 4 views
1

Я хочу вызвать make-файл следующим образом: make uj LOCATION = my_room и показать my_room в распечатках.Получение аргумента makefile в исходном коде C

Например:

print(" LOCATION is %s \n", LOCATION); 

Если печать РАСПОЛОЖЕНИЕ является my_room. Если параметр LOCATION не задан, он должен печатать неопределенные.

Я пробовал со следующим. В моей Makefile:

ifndef LOCATION 
    LOCATION = "undefined" 
endif 

CFLAGS += -DLOCATION=$(LOCATION) 

А затем вызвать вышеуказанную функцию печати, но это бросает ошибку компиляции. Я что-то упускаю. Вы можете помочь?

Отредактировано: Добавлена ​​ошибка во время компиляции.

In file included from ../../uJ/cerberOS_BSP.h:4:0, 
       from ../../uJ/main_upnp.c:3: 
../../uJ/main_upnp.c: In function ‘printDiagnostics’: 
../../uJ/cerberOS_debug.h:15:59: error: expected expression before ‘)’ token 
#define print(FORMAT,args...) printf_P(PSTR(FORMAT),##args) 
                 ^
../../uJ/main_upnp.c:35:2: note: in expansion of macro ‘print’ 
    print(" LOCATION (as s) is %s \n", LOCATION); 
+2

Что вы подразумеваете под «ошибками»? Если у вас есть ошибки в построении, включите журнал сборки в орган вопроса (полностью, полный и неотредактированный). –

+0

Самый простой способ отладки - просто передать свой источник через препроцессор и посмотреть, что создается в этом месте. – StoryTeller

+0

Извинения, добавлена ​​ошибка во время компиляции. –

ответ

3

Кавычки для строки отсутствуют, поэтому он будет расширяться

print(" LOCATION is %s \n", undefined);

Try:

CFLAGS += -DLOCATION=\"$(LOCATION)\"

Это будет расширяться

print(" LOCATION is %s \n", "undefined");

Это то, что вы хотите.

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