2017-01-03 2 views
1

Возможно ли перезаписать макрос другим значением из Makefile?Перезаписать макрокоманду из Makefile

Допустим, у меня есть файл a.c и Makefile.

В файле a.c я объявляю макрос как #define DEBUG 1. Я хочу передать значение, чтобы заменить его на Makefile, как CCFLAGS += -D DEBUG -Dvar=1. Однако, если я это сделаю, я получаю сообщение redefine, и значение поддерживает тот, который используется в a.c.

Возможно ли это? а также эта плохая практика?

ответ

3

Вам нужно изменить ваше макроопределению себя:

#ifndef DEBUG 
# define DEBUG 1 
#endif 

Или просто удалить определение в целом, и всегда передавать значение из системы сборки.

2

Возможно ли это?

Это не должно быть возможно через флаги как -DFOO=bar как макрос определить в командной строке приходит , прежде чем те в файлах исходного кода, таким образом, будет преодолено (переопределены).

Однако, если вы намерены управлять значениями макроса через флаги компилятора, вы можете найти полезную директиву ifndef. Например:

[[email protected] tmp]$ cat a.c 
#ifndef TEST 
# define TEST 1 
#endif 

TEST 
[[email protected] tmp]$ cpp a.c 
# 1 "a.c" 
# 1 "<built-in>" 
# 1 "<command-line>" 
# 31 "<command-line>" 
# 1 "/usr/include/stdc-predef.h" 1 3 4 
# 32 "<command-line>" 2 
# 1 "a.c" 




1 
[[email protected] tmp]$ cpp a.c -DTEST=2 
# 1 "a.c" 
# 1 "<built-in>" 
# 1 "<command-line>" 
# 1 "/usr/include/stdc-predef.h" 1 3 4 
# 1 "<command-line>" 2 
# 1 "a.c" 




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