CMakeではほとんどのサードパーティのライブラリでは、インクルードディレクトリを指定する必要はありません...彼らは私のためにそれを世話しているようです。しかし、サードパーティーの図書館の中には、私の作品にその作品を載せているものもあります。CMakeを使用すると、なぜサードパーティのライブラリがインクルードディレクトリを自動的に表示するのですか?
私が間違っていることを示している第三者の図書館全体で見つかった違いはありますか?あるいは、CMakeは、サードパーティ製のライブラリが他のライブラリよりもあなたの手を保つようになっている、それほど構造化されていない環境ですか?ここで何が起こっているのですか?ベストプラクティス?
私はいくつかの例を挙げます。 OpenCVのは、物事が超簡単になり、私は彼らのインクルードディレクトリを言及することは必要:
set(OpenCV_DIR ${THIRD_PARTY_DIR}/OpenCV)
find_package(OpenCV REQUIRED)
...
add_executable(${PROJECT_NAME} ${HEADER_FILES} ${SOURCE_FILES})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
はしかし、Googleのプロトコルバッファinclude_directoriesを使用するために私を必要としない彼らのヘッダファイルを使用するためにコマンド:
set(CMAKE_PREFIX_PATH ${THIRD_PARTY_PROTOBUF_DIR})
find_package(Protobuf ${THIRD_PARTY_DIR}/protobuf-2.6.1)
...
include_directories(${PROTOBUF_INCLUDE_DIRS})
add_library(${PROJECT_NAME} SHARED ${HEADER_FILES} ${SOURCE_FILES})
target_link_libraries(${PROJECT_NAME} ${PROTOBUF_LIBRARIES})
おそらく、最初のケースでは、OpenCVがシステム全体のパッケージとしてシステムにインストールされているため、ヘッダーは標準パスにあります。アンインストールしてもう一度試してみてください。私に教えてください、もしそうなら、答えにコメントをつけます。 ;-) – skypjack
@skypjackの返信をありがとうが、私が使用しているOpenCVやその他のサードパーティのライブラリは、システム全体のレベルにインストールされていません。私はソースからサードパーティー(またはダウンロード済みのビルド済みバイナリ)を構築し、バイナリ/ヘッダをベースラインのThirdPartyフォルダに配置しました。インストールはありません。 –