во время выполнения некоторых задач мне нужно выполнить команду терминала в файле. c. У меня был следующий макет в моем файле. c, и он прекрасно работает:
#ifdef CONDITION_A
static const char * funcA(){
#define SIZE 56
#define T_A_CMD "sudo info | grep \"Memory Size:\""
...
...}
#endif
#ifdef CONDITION_B
static const char * funcB(){
#define SIZE 56
#define T_B_CMD "sudo info | grep \"Battery Level:\""
...
...}
#endif
Теперь, допустим, у нас есть submakeA.mk
и submakeB.mk
и основной Makefile. Когда вы компилируете с make TARGET=submakeA
, funA()
будет скомпилировано и запущено. Если вы запустите make TARGET=submakeB
, funcB()
будет скомпилирован и запущен.
Теперь меня просят определить «T_A_CMD» и «T_B_CMD» в их соответствующих файлах submakeA.mk и submakeB.mk.
У меня есть следующий макет: 1) В основном Makefile:
ifdef t_a_cmd
cflag += -DCONFIG_T_A_CMD='"$(t_a_cmd)"'
endif
ifdef t_b_cmd
cflag += -DCONFIG_T_B_CMD='"$(t_b_cmd)"'
endif
2) В submakeA.mk:
t_a_cmd = sudo info | grep \"Memory Size:\"
3) В submakeB.mk :
t_b_cmd = sudo info | grep \"Battery Level:\"
4) В. c файле
#ifndef CONFIG_T_A_CMD
//do nothing
#else
#define T_A_CMD "sudo info | grep \"Memory Size:\""
#endif
#ifndef CONFIG_T_B_CMD
//do nothing
#else
#define T_B_CMD "sudo info | grep \"Battery Level:\""
#endif
#ifdef CONDITION_A
static const char * funcA(){
#define SIZE 56
#ifdef T_A_CMD
...
...
#endif
}
#endif
#ifdef CONDITION_B
static const char * funcB(){
#define SIZE 56
#ifdef T_B_CMD
...
...
#endif
}
#endif
Когда я запускаю его, компилятор выдает мне эту ошибку:
> Generating info details header file
/bin/sh: 3: syntax error: "(" unexpected
/home/usr/build.mk:59: recipe for target '/home/usr/build/submakeA/A.o' failed
make[1]:***[/home/usr/build/submakeA/A.o] Error2
Makefile:230: recipe for target 'A' failed
make: *** [A] Error
Я пытался изменить расположение #ifdef T_A_CMD
и #endif
вокруг, но все комбинации не помогли. Может кто-нибудь дать мне знать, что пошло не так, пожалуйста? Кроме того, я не нашел никакой документации или ресурсов об использовании «DCONFIG» и «CONFIG» в Makefile и о том, как они могут быть полностью переданы в исходный файл. c. Если кто-то может указать мне на такие ресурсы, это тоже будет здорово