【发布时间】: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 <semaphore.h> 会导致 _BSD_SEMAPHORE_H 警告,#include "semaphore.h" 会导致 semaphore_h 警告。库项目的行为与应用项目不同。
【问题讨论】: