我有一个名为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
。问题是,为什么呢?我错过了一些配置吗?
注意:当然我可以更改文件的名称,但我更理解为什么会这样。这个框架在文件数量上仍然会有很大的增长,我不想担心这种冲突。
答案 0 :(得分:1)
设置USE_HEADERMAP = NO
。设置为YES
时,XCode使用字典将头文件名映射到要查找的路径,以加快编译速度。因此,无论您将头文件放在何处,如果它已经找到了进入此地图的方式,它将被发现。
另一种方法是对所有用户头文件使用绝对路径,例如#include "./assert.h"
(如果文件不直接位于项目目录中或任何手动定义用户标题搜索路径,则应该给出错误。)
希望它有所帮助;