linux - CMake QNX 交叉编译 find_path 和 find_library 适用于 Linux 但不适用于 Windows

标签 linux windows cmake path intel-ipp

# 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 脚本如上所示。在 window 上,我得到 -- 找不到 IPP(缺少:IPP_INCLUDE_DIR IPP_LIBRARY)。 我已经在 Linux 下测试过它,它可以正常工作。在这两种情况下,我都尝试使用 QNX Momentics 工具链进行交叉编译。

  • ${CMAKE_CURRENT_SOURCE_DIR} 是包含 (FindIpp) 的“根”脚本的位置。
  • 我查看了 ${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 的方法吗?谢谢

最佳答案

那么从 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 变量,您就可以开始了。

关于linux - CMake QNX 交叉编译 find_path 和 find_library 适用于 Linux 但不适用于 Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38726127/

相关文章:

windows - CoInitialize 上保留参数的预期用途是什么

C++/Win32 : Keyboard input to a non-foreground window

visual-studio - Cuda 与 cmake

linux - 替换符合两个条件的行上的单词

c++ - 使用 Netbeans (linux/mac) 为 dylib 设置当前/兼容版本

c - malloc 和 calloc

macos - CMake:将框架复制到 App Bundle

c - 无需查找即可写入的音频文件格式

windows - 如何从文本文件中删除注释

c++ - 通过使用特定于平台的项目文件或使用项目生成器来构建自动化?