包括头文件(如果存在)以重新定义C中的宏

时间:2019-03-26 03:21:17

标签: c makefile header preprocessor

我有两个头文件,一个是定义了许多默认宏的库 即:

libraryheader.h:

#define ANAME 1
#define BNAME 2
.
.
.

并且我希望能够有一个用户可以提供的其他可选标头,以在项目中重新定义这些宏

optional.h:

#define ANAME 5
#define BNAME 15
.
.
.

可选的头文件.h并不总是存在,我只想包含它(如果确实存在)。在makefile或库标头中是否可以检查该标头是否存在并重新定义宏。

我正在考虑检查该文件是否存在于makefile中,并通过将以下内容放入makefile中来设置标志

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

,然后以某种方式检查库标头中的标志宏。 但是我还没有成功。谢谢

1 个答案:

答案 0 :(得分:1)

可以使用注释“通配符”中提到的@Matt。

但是,当我使用一个小程序对其进行测试时,我必须做以下事情。

如果我总是在我的.c文件中包含“ optional.h”,那么当.h文件不存在时,它将产生构建错误。同样,如果我不包括在内,即使文件存在,我也将无法更新宏。因此,我在makefile中执行了以下操作。

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

在我的.c文件中,我使用INCLUDE_OPTIONAL_H包括如下所示的optional.h。

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

在optional.h中,我检查了是否已经定义了宏并取消了定义,然后对其进行了更新。

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