Xcode(8.3.2)で新しいライブラリプロジェクトを作成し、フレームワークを選択します:STL(C++ライブラリ)、タイプ:スタティック、名前は "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
警告を発します。ライブラリプロジェクトは、アプリプロジェクトとは動作が異なります。