【问题标题】:force cmake to compile openCV with llvm强制 cmake 用 llvm 编译 openCV
【发布时间】:2012-09-24 19:55:08
【问题描述】:

背景

我的目标是为 ios 编译 OpenCV 并支持 armv7s(s 是困难的部分)架构,但一直无法取得任何进展。我最近的理论是问题在于库附带的 cmake 文件使用 gcc 作为编译器,我认为它不支持 armv7s(如果我错了,请告诉我)。但是,我对 cmake 完全陌生,无法更改编译器。

我怀疑编译器的原因是因为那一行

set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_BIT)" CACHE string  "Build architecture for iOS")

据我所知应该包括 armv7s。将该行更改为

set (CMAKE_OSX_ARCHITECTURES "armv6;armv7;armv7s;i386" CACHE string  "Build architecture for iOS")

没有效果。

我知道有关于如何设置编译器hereherehere 的说明。我的问题是我正在尝试更改现有的 cmake 系统,但不知道我的更改可能会产生什么后果。有问题的代码可以下载here。为了构建框架,我在 OpenCV-2.4.2/ios 中运行 python 脚本

python build_framework.py ~/Desktop

据我所知,相关的 cmake 文件位于 OpenCV-2.4.2/ios/cmake。只有 3 个,而且都很短。我最近的尝试是更改工具链中的两行

CMAKE_FORCE_C_COMPILER (gcc gcc)
CMAKE_FORCE_CXX_COMPILER (g++ g++)

SET (DEVROOT    "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer")
SET (CC         "${DEVROOT}/usr/bin/llvm-gcc-4.2")
SET (CXX        "${DEVROOT}/usr/bin/llvm-g++-4.2")
CMAKE_FORCE_C_COMPILER          (${CC} CLang)
CMAKE_FORCE_CXX_COMPILER        (${CXX} CLang)

试图复制this SO 问题。

问题

  1. 我的第一个也是最重要的问题是这是否超出了我的理解范围。我一直假设更改编译器/目标架构将是在某处设置一个简单的标志,但我越来越不相信这是真的。此外,还有一个完整的目录 OpenCV-2.4.2/cmake 充满了更大的 cmake 文件,我一直在避免这些文件,希望我不必担心它们的内容。这是我能在 10 小时内解决的问题吗?
  2. 如果您对上一个问题的回答是肯定的,您能给我一些指导吗?推荐阅读?我是否有理由忽略 OpenCV-2.4.2/cmake 的内容?我已经在黑暗中拍摄了很长一段时间,但没有成功。
  3. 如果结果如我最初希望的那样简单,我该怎么做?

更新

我从来没有弄清楚如何做到这一点,但是库 here 的 xcode 版本可以轻松更改编译设置。

【问题讨论】:

    标签: ios build cmake


    【解决方案1】:

    CMAKE_C_COMPILIERCMAKE_CXX_COMPILIER 设置为您需要的。

    编辑:这假设您已经成功地为 armv7 构建了它。
    Edit2:这只会改变编译器。

    【讨论】:

    • 我把 set(CMAKE_C_COMPILIER "llvm-gcc-4.2") set(CMAKE_CXX_COMPILIER "llvm-g++-4.2") 放在我认为是 cmake 入口点的开头。它运行没有错误,但对 OpenCV 2.4.2 显示的常规配置没有影响。 gcc 和 g++ 仍然是编译器
    • 你的意思是工具链文件吗?
    • 不,我把它放在iOS.cmake中,它应该在工具链文件中吗?
    • 好吧,我还没有看到你的 .toolchain 和 .cmake 文件,但我想是的。至少,这是一件很平常的事情。
    • 我把它们放在工具链文件中,没有效果。如果您想查看可以从发布的链接下载的文件
    【解决方案2】:

    我在您的问题中看到了很多链接,但没有找到包含 to cross compile with CMake 信息的原始链接。

    您不应更改现有构建系统中的任何内容。

    一般来说,您需要为您的目标架构创建toolchain file 并使用它运行 cmake。

    cmake -DCMAKE_TOOLCHAIN_FILE=

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      相关资源
      最近更新 更多