Целью этого является создание программы с макросами, введенными из командной строки, с использованием Makefile.
Я хотел бы определить макросы, используя несколько терминов, однако я получаю сообщение об ошибке в качестве последующих частей Строка обрабатывается как файлы gcc
.
. Пример того, что мне нужно, следующий:
#define ULL unsigned long long
#define T_ULL typedef unsigned long long ull_t
В результате я могу создавать только макросы, содержащие 1 термин за определение.
Последняя попытка позволяет мне создавать параметризованные макросы, однако они также ограничены 1 термином для определения.
Попытка решения
#include <stdio.h>
#define _STRINGIZE(x) #x
#define STRINGIZE(x) _STRINGIZE(x)
int main(void)
{
# ifdef DEBUG
# ifdef STRING
printf("%s", "A STRING macro was defined.\n");
printf("string: %s\n", STRINGIZE(STRING));
# else
printf("%s\n", "A DEBUG macro was defined.");
# endif
# endif
}
Результаты
Как описано справочной страницей , под описанием опции -D.
$ gcc define.c -D='DEBUG' ; ./a.out
A DEBUG macro was defined.
Как описано этим ответом, как альтернативный подход.
$ gcc define.c -D'DEBUG' ; ./a.out
A DEBUG macro was defined.
$ gcc define.c -D'DEBUG' -D'STRING="abc"' ; ./a.out
A STRING macro was defined.
string: "abc"
$ gcc define.c -D'DEBUG' -D'STRING="abc efg"' ; ./a.out
clang: error: no such file or directory: 'efg"'
A STRING macro was defined.
string: "abc"
$ gcc define.c -D'DEBUG' -D'STRING="abc efg hij"' ; ./a.out
clang: error: no such file or directory: 'efg'
clang: error: no such file or directory: 'hij"'
A DEBUG macro was defined.
string: "abc"