在Xcode(8.3.2)中創建新的庫項目,選擇Framework:STL(C++ Library),類型:Static,並將其命名爲「MyLibrary」。您將獲得開始文件MyLibrary.hpp,MyLibraryPriv.hpp,MyLibrary.cpp。創建新的頭文件semaphore.h,將它放在與所有其他文件夾相同的文件夾中。這個文件應該有一個包含防護定義semaphore_h
。包含不包含靜態lib項目的用戶路徑的路徑
加入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
。
這是一個錯誤?如何解決它?我的項目中有一個與系統標題共享相同名稱的標題,但我寧願不更改名稱。
奇怪的是,如果它是一個應用程序項目(命令行工具),那麼它會按預期工作。 #include <semaphore.h>
會導致_BSD_SEMAPHORE_H
警告,#include "semaphore.h"
會導致semaphore_h
警告。庫項目的行爲與應用程序項目不同。