Включите заголовочный файл, если он существует для переопределения макросов в C - PullRequest
1 голос
/ 26 марта 2019

У меня есть два заголовочных файла, один из которых является библиотекой с определенным количеством макросов по умолчанию то есть:

libraryheader.h:

#define ANAME 1
#define BNAME 2
.
.
.

и я хочу иметь еще один необязательный заголовок, который пользователь может предоставить для переопределения этих макросов в проекте

optional.h:

#define ANAME 5
#define BNAME 15
.
.
.

Заголовок option.h не всегда существует, и я хочу включить его, только если он существует. Есть ли способ в заголовке make-файла или библиотеки проверить, существует ли этот заголовок, и переопределить макросы.

Я думаю проверить, существует ли файл в make-файле и установить флаг, поместив в make-файл следующее

ifdef $(test -f optional.h && echo "present")

и затем каким-то образом проверить макрос флага в заголовке библиотеки. Но я еще не добился успеха. Спасибо

1 Ответ

1 голос
/ 26 марта 2019

Как упомянуто в комментарии @Matt, можно использовать «подстановочный знак».

Однако, когда я протестировал его с помощью маленькой программы, мне пришлось сделать следующее:

Если я всегда включаю «extra.h» в мой файл .c, то это приведет к ошибке сборки, если файл .h отсутствует. Точно так же, если я не включу, даже если файл присутствует, я не смогу обновить макросы. Поэтому я сделал следующее в моем make-файле.

CFLAGS += $(if $(wildcard ./optional.h),-include ./optional.h -DINCLUDE_OPTIONAL_H)

В своем файле .c я использовал INCLUDE_OPTIONAL_H для включения необязательного .h, как показано ниже.

#ifdef INCLUDE_OPTIONAL_H
#include "optional.h"
#endif

В файле option.h я проверил, определен ли макрос уже и определил его, а затем обновил его.

#ifdef ANAME
#undef ANAME
#endif
#define ANAME <new_value>
...