# Try to find IntelIPP
# Once done, this will define
#
# Ipp_FOUND - system has IntelIPP
# Ipp_INCLUDE_DIR - the IntelIPP include directories
# Ipp_LIBRARY - link these to use IntelIPP
include(LibFindMacros)
set(IPP_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../libs/intel/linux/intel_ipp)
# Include dir
find_path(Ipp_INCLUDE_DIR
NAMES ipp.h
PATHS ${IPP_ROOT_DIR}/include
)
find_library(Ipp_IRC_LIB
NAMES irc
PATHS ${IPP_ROOT_DIR}/lib/ia32
)
find_library(Ipp_MAT_LIB
NAMES ippm
PATHS ${IPP_ROOT_DIR}/lib/ia32
)
list(APPEND Ipp_LIBRARY ${Ipp_IRC_LIB} ${Ipp_MAT_LIB})
include(FindPackageHandleStandardArgs)
# handle the QUIETLY and REQUIRED arguments and set Ipp_FOUND to TRUE
# if all listed variables are TRUE
find_package_handle_standard_args(Ipp DEFAULT_MSG
Ipp_LIBRARY Ipp_INCLUDE_DIR)
# Set the include dir variables and the libraries and let libfind_process do the rest.
# NOTE: Singular variables for this library
set(Ipp_INCLUDE_DIRS ${Ipp_INCLUDE_DIR})
set(Ipp_LIBRARIES ${Ipp_LIBRARY})
私のFindIpp.cmakeスクリプトは上記のとおりです。 Windowsでは、私は得る -- Could NOT find IPP (missing: IPP_INCLUDE_DIR IPP_LIBRARY).
私はこれをLinuxでテストしましたが、問題なく動作します。どちらの場合も、QNX Momenticsツールチェインを使用してクロスコンパイルしようとしています。CMake QNXクロスコンパイルfind_pathとfind_libraryはLinuxでは動作しますが、Windowsでは動作しません
- $ {CMAKE_CURRENT_SOURCE_DIR}は、(FindIpp)を含む 'root'スクリプトの場所です。
- $ {CMAKE_CURRENT_SOURCE_DIR}の出力と相対パスの出力を見て、ファイルとフォルダが報告されたパスに存在することを確認しました。 $ {CMAKE_CURRENT_SOURCE_DIR} /../ libs/intelはC:/../ libs/intelとして表示されます。
- 私はLinuxでCMake 3.5を、Windows 7でCMake 3.6.1を使用しています。
- cmdプロンプトから、問題なく「cd c:/ libs/intel」と入力できました。
- IPP_ROOT_DIRパスを
set(IPP_ROOT_DIR C:/libs/intel/linux/intel_ipp)
にハードコーディングして、パスの周りに引用符を追加しようとしました。CACHE PATH "Description"
をset
コールに追加しました。これらのどれも働かなかった。 私は、-Ginja、-G "MinGW Makefiles"と-G "Unix Makefiles"を試しました。まだ思い付いた:
-- Could NOT find IPP (missing: IPP_INCLUDE_DIR IPP_LIBRARY) -- Could NOT find Mkl (missing: Mkl_LIBRARY Mkl_INCLUDE_DIR) -- Could NOT find Boost (missing: Boost_LIBRARY Boost_INCLUDE_DIR) -- Could NOT find GTest (missing: GTEST_LIBRARY GTEST_MAIN_LIBRARY)
コピーとメインCMakeLists.txtファイルにFindIpp.cmakeのような個々のファイルから内容を貼り付けたライブラリを見つけたが、パスが含まれていません。今私は
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SRC_DIR}/CMake/Modules)
を追加して私のモジュールファイルを見つけました。もしその行を削除すると、cmakeはエラーをinclude(FindIpp)
に投げます。 私が間違っていることは明らかですか?また、これはfind_libraryまたはfind_pathを書き込む方法ですか? WindowsとLinuxからQNXにクロスコンパイルのおかげ
'find_library'呼び出しに問題がある場合は、この呼び出しを**直接**ハードコードされた値でテストしてください。その場合、 'Find * .cmake'スクリプト全体をデバッグする必要はありません。クロスコンパイルでは、ツールチェーンが検索を許可するパスを確認します。ホストはホスト、ターゲットはターゲット、またはその両方です。変数[CMAKE_FIND_ROOT_PATH_MODE_LIBRARY](https://cmake.org/cmake/help/v3.0/variable/CMAKE_FIND_ROOT_PATH_MODE_LIBRARY.html)の説明を参照してください。 – Tsyvarev
これを直接電話しようとしました。運がない。また、 'set(IPP_ROOT_DIR" C:/ libs/intel/linux/intel_ipp ") メッセージ(STATUS" IPP_ROOT_DIR: "$ {IPP_ROOT_DIR})'は出力のどこにでもIPP_ROOT_DIRを表示しません。 – dibsonmuad
'find_ *'コマンドに影響を与える可能性のある* toolchain *について教えてください。プロジェクトをネイティブにビルドしてください(Visual Studioコンパイラ、MinGWのgccなど)。このようなビルドで 'find_path'が動作するなら、あなたのツールチェインは確かにそれに影響します。 – Tsyvarev