c - 包含头文件(如果存在)以在 C 中重新定义宏

标签 c makefile header preprocessor

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

库头.h:

#define ANAME 1
#define BNAME 2
.
.
.

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

可选.h:

#define ANAME 5
#define BNAME 15
.
.
.

标题 optional.h 并不总是存在,我只想在它存在时包含它。 makefile 或库 header 中是否有一种方法可以检查此 header 是否存在并重新定义宏。

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

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

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

最佳答案

正如@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>

关于c - 包含头文件(如果存在)以在 C 中重新定义宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55349379/

相关文章:

c - 不使用循环访问多维数组?

macos - 无法制作 OpenCV

ios - 核心图标题搜索路径,递归是什么意思?

C++ 将类型映射到它的头文件

用指针改变变量的值?

PicKit3 和 MPlabX(IDE 和 IPE)的连接失败错误

MySQL:我可以更新当前结果集中的记录还是需要 2 个并行查询/连接

c - OpenMp和代码块16?

c++ - Makefile 重复符号

c++ - 读取四字节字符