包含 header 文件(如果存在)以在 C 中重新定义宏
Include header file if it exists to redefine macros in C
我有两个 header 文件,其中一个是定义了一些默认宏的库
即:
libraryheader.h:
#define ANAME 1
#define BNAME 2
.
.
.
并且我希望能够有另一个可选的 header 用户可以提供以重新定义项目中的这些宏
optional.h:
#define ANAME 5
#define BNAME 15
.
.
.
header optional.h 并不总是存在,我只想在它存在时包含它。 makefile 或库 header 中有没有办法检查此 header 是否存在并重新定义宏。
我正在考虑检查该文件是否存在于 makefile 中,并通过将以下内容放入 makefile 中来设置标志
ifdef $(test -f optional.h && echo "present")
然后以某种方式检查库 header 中的标志宏。
但我还没有取得任何成功。谢谢
@Matt 在评论中提到 "wildcard" 可以使用。
然而,当我使用一个小程序测试它时,我不得不做以下事情。
如果我总是在我的 .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>
我有两个 header 文件,其中一个是定义了一些默认宏的库 即:
libraryheader.h:
#define ANAME 1
#define BNAME 2
.
.
.
并且我希望能够有另一个可选的 header 用户可以提供以重新定义项目中的这些宏
optional.h:
#define ANAME 5
#define BNAME 15
.
.
.
header optional.h 并不总是存在,我只想在它存在时包含它。 makefile 或库 header 中有没有办法检查此 header 是否存在并重新定义宏。
我正在考虑检查该文件是否存在于 makefile 中,并通过将以下内容放入 makefile 中来设置标志
ifdef $(test -f optional.h && echo "present")
然后以某种方式检查库 header 中的标志宏。 但我还没有取得任何成功。谢谢
@Matt 在评论中提到 "wildcard" 可以使用。
然而,当我使用一个小程序测试它时,我不得不做以下事情。
如果我总是在我的 .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>