【问题标题】:Xcode/clang including the wrong fileXcode/clang 包括错误的文件
【发布时间】: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 的宏。到目前为止一切正常。

问题在于,无论包含&lt;hul/assert.h&gt;&lt;assert.h&gt;,它总是包含hul/assert.h,这不是我想要的。这也是hul/assert.hhul文件夹下的限定原因之一。

首先要检查的是Other C FlagsHeader Search Paths。但后者为空,前者如下:

-I../../include/Core
-I../../test/include/Core
-I../../test/include

如您所见,Core/hul 不包括在内,因此#include &lt;assert.h&gt; 不应解析为hul/assert.h。问题是,为什么会这样?我是否缺少一些配置?

注意:我当然可以更改文件名,但我更明白为什么会这样。这个框架的文件数量仍然会大大增加,我不想担心这种冲突。

【问题讨论】:

    标签: c xcode clang


    【解决方案1】:

    设置USE_HEADERMAP = NO。当设置为YES 时,XCode 使用一个将头文件名映射到要查找的路径的字典,以加快编译速度。所以不管你把你的头文件放在哪里,如果它找到了进入这张地图的方式,它就会被找到。

    另一种方法是对所有用户头文件使用绝对路径,例如#include "./assert.h"(如果文件不直接位于项目目录或任何手动定义的用户标头搜索路径中,这应该会给您一个错误)。

    希望对你有帮助;

    【讨论】:

    • 完美!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多