【问题标题】:Include paths not excluding user path for static lib project包含路径不排除静态库项目的用户路径
【发布时间】:2017-05-23 23:55:27
【问题描述】:

在Xcode(8.3.2)中新建库项目,选择Framework:STL(C++ Library),Type:Static,命名为“MyLibrary”。您将获得启动文件 MyLibrary.hpp、MyLibraryPriv.hpp、MyLibrary.cpp。创建新的头文件 semaphore.h,并将其放在与所有其他文件相同的文件夹中。这个文件应该有一个包含保护定义semaphore_h

在 MyLibrary.cpp 中添加以下行:

#include <semaphore.h>

#ifdef _BSD_SEMAPHORE_H
#warning _BSD_SEMAPHORE_H
#endif

#ifdef semaphore_h
#warning semaphore_h
#endif

我这里包含了一个系统头文件,不是我刚刚添加的文件,但是构建的结果是semaphore_h会被写成构建警告,这是错误的。如果我在 Finder 中重命名我的文件,则会写入 _BSD_SEMAPHORE_H,应该是这样。

这是一个错误吗?如何解决它?我的项目中有一个标题与系统标题同名,但我不想更改名称。

奇怪的是,如果它是一个 app 项目(命令行工具),那么它会按预期工作。 #include &lt;semaphore.h&gt; 会导致 _BSD_SEMAPHORE_H 警告,#include "semaphore.h" 会导致 semaphore_h 警告。库项目的行为与应用项目不同。

【问题讨论】:

    标签: c++ xcode


    【解决方案1】:

    要回答我自己的问题,这是一个延伸到 Xcode 4 甚至更远的错误。应为静态库禁用构建选项 USE_HEADERMAP(项目设置 > 搜索路径 > 使用标题映射 > 设置为 No)。那么同名头文件之间应该没有冲突。

    该选项不会给应用程序带来问题,尽管它显然曾经在 past 中使用过。还有一个 SO question 禁用该选项就是答案,但是当我第一次阅读它时,我没有意识到它也适用于我的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      相关资源
      最近更新 更多