包括不包括静态lib项目的用户路径的路径

时间:2017-05-23 14:12:54

标签: c++ xcode

在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 <semaphore.h>会导致_BSD_SEMAPHORE_H警告,#include "semaphore.h"会导致semaphore_h警告。图书馆项目的行为与应用项目不同。

1 个答案:

答案 0 :(得分:0)

要回答我自己的问题,这是一个延伸到Xcode 4甚至可能超出的错误。应为静态库禁用构建选项USE_HEADERMAP(项目设置&gt;搜索路径&gt;使用页眉地图&gt;设置为)。然后,同名头文件之间不应该发生冲突。

该选项不会导致应用程序出现问题,但显然已经习惯于past。还有一个SO question禁用该选项就是答案,但是当我第一次阅读它时,我并没有意识到它也适用于我的情况。