2016-08-02 703 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調用。這些都沒有奏效。
  • 我嘗試了-GNinja,-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) 
    
  • 複製並從個人文件,如FindIpp.cmake到主的CMakeLists.txt文件粘貼內容找到庫,但不包括路徑。現在我還添加了list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SRC_DIR}/CMake/Modules)來查找我的模塊文件。如果我刪除該行,cmake會在include(FindIpp)處發生錯誤。 有什麼明顯的,我做錯了?另外,這是寫一個find_library或find_path的方式嗎?由於

+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

那麼,什麼是* toolchain *,可能會影響'find_ *'命令?嘗試本地生成項目(例如,使用Visual Studio編譯器,或使用MinGW下的gcc)。如果'find_path'在這樣的構建中起作用,那麼你的工具鏈肯定會影響它。 – Tsyvarev

回答

2

所以正確的方法來從Windows和Linux交叉編譯到QNX:

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

其中660是QNX版本6.6.0。我爲QNX使用了我自己的工具鏈文件。這不是必需的。在share/cmake-/Modules/Platform下已經提供了一個。所以只要我們在某個地方定義了上面的CMAKE變量,你應該很好。

相關問題