【发布时间】:2017-01-25 19:46:34
【问题描述】:
我有一个名为assert.h 的文件,它定义了几个断言宏。该项目名为Core,位于同名文件夹中。但是,该文件位于Core/hul 中,它是该项目的一个子模块,它实现了一些抽象实用程序。以下是该文件的摘录:
#if defined(HUL_DEBUG)
# if defined(HUL_TEST)
# define HUL_ASSERT(e) HUL_TEST_ASSERT(e)
# else
# include <assert.h>
# define HUL_ASSERT(e) assert(e)
# endif
#else
# define HUL_ASSERT(e) /* empty, do nothing */
#endif
如您所见,当定义HUL_TEST 时,断言宏扩展为单元测试断言回调。这很好用。编译发布时(例如,HUL_DEBUG 未定义)它什么也不做。也很好。编译调试(不测试)时,它包含系统的assert.h 并定义了一个扩展为assert 的宏。到目前为止一切正常。
问题在于,无论包含<hul/assert.h> 或<assert.h>,它总是包含hul/assert.h,这不是我想要的。这也是hul/assert.h在hul文件夹下的限定原因之一。
首先要检查的是Other C Flags 和Header Search Paths。但后者为空,前者如下:
-I../../include/Core
-I../../test/include/Core
-I../../test/include
如您所见,Core/hul 不包括在内,因此#include <assert.h> 不应解析为hul/assert.h。问题是,为什么会这样?我是否缺少一些配置?
注意:我当然可以更改文件名,但我更明白为什么会这样。这个框架的文件数量仍然会大大增加,我不想担心这种冲突。
【问题讨论】: