2017-05-23 11 views
0

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警告を発します。ライブラリプロジェクトは、アプリプロジェクトとは動作が異なります。

答えて

0

私自身の質問に答えるには、Xcode 4以降のバグです。ビルドオプション静的ライブラリの場合、USE_HEADERMAPを無効にする必要があります(プロジェクト設定>検索パス>ヘッダマップを使用>に設定します)。)。同じ名前のヘッダファイル間に衝突があってはならない。

このオプションは、アプリケーションに問題はありませんが、これは明らかに、pastで使用されていました。また、オプションを無効にすることが答えであるSO questionもありますが、私が初めて読むとき、私はそれが私の場合にも当てはまることを認識しませんでした。

関連する問題