2016-08-02 26 views
0
# 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にクロスコンパイルのおかげ

+1

'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

+0

これを直接電話しようとしました。運がない。また、 'set(IPP_ROOT_DIR" C:/ libs/intel/linux/intel_ipp ") メッセージ(STATUS" IPP_ROOT_DIR: "$ {IPP_ROOT_DIR})'は出力のどこにでもIPP_ROOT_DIRを表示しません。 – dibsonmuad

+0

'find_ *'コマンドに影響を与える可能性のある* toolchain *について教えてください。プロジェクトをネイティブにビルドしてください(Visual Studioコンパイラ、MinGWのgccなど)。このようなビルドで 'find_path'が動作するなら、あなたのツールチェインは確かにそれに影響します。 – Tsyvarev

答えて

2

だから正しい方法:660は、QNXバージョン6.6.0で

cmake -DCMAKE_SYSTEM_NAME="QNX" -DCMAKE_SYSTEM_VERSION="660" -DCMAKE_SYSTEM_PROCESSOR="x86" -GNinja path_to_project

。 QNX用に独自のツールチェインファイルを使用していました。これは必要ではありません。シェア/ cmake-/Modules/Platformの下には既に1つが提供されています。だから、どこかで上記のCMAKE変数を定義する限り、あなたは良いことがあるはずです。

関連する問題