【问题标题】:qmake conditional for RaspberryPi树莓派的 qmake 条件
【发布时间】:2016-04-26 17:04:06
【问题描述】:

我正在尝试制作一个 qmake .pro 文件以在 RaspberryPi 中编译(不用于交叉编译)。我可以根据平台使用条件定义吗:

linux-g++-64: {
    message(We are in Linux 64 bits)
}
macx: {
    message(we are in mac osX)
}
win32: ...

但我无法找到一种方法来检测我何时在带有 raspbian 的 PaspberryPi 中。

我尝试过linux-armarm-linuxlinux-arm-gnueabi-g++ 之类的方法,但运气不佳。

有人知道做出这个条件定义的正确方法或如何检测我们是否在 RaspberryPi 架构中进行编译?

【问题讨论】:

  • @Troyseph Thakns 用于链接,但我认为它不一样,在另一篇文章中,“变量”在 .pro 文件中是固定的。就我而言,我想在外部做,因为我想要 X86 和 ARM 架构的相同 .pro 文件。
  • 我将此问题标记为重复,因为您都要求相同的功能(方式略有不同),而该问题的答案可帮助您实现目标。虽然不是直接重复,但将这两个问题联系起来对您和未来的用户都有帮助。
  • 我从你那里了解到,可以在调用 qmake 时添加 CONFIGDEFINES 变量,这样你的 .pro 文件对于所有平台仍然是相同的。
  • @Troyseph 是的,这就是重点,您只有一个 .pro,它适用于所有 SO 或平台,通常您可以检测它是 Windows 还是 unix,甚至是 mac,但我无法检测到我是在 intel linux 中还是在 arm linux 中(在我的情况下为 raspberrypi),所以我发现的唯一方法是在 qmake 命令中传递一些标志。

标签: c++ linux qt raspberry-pi qmake


【解决方案1】:

这对我有用:

linux {
    contains(QMAKE_HOST.arch, arm.*):{
        raspberry's bla bla bla

    }else{
        ...
    }
}

我希望它对你有用。

http://doc.qt.io/qt-5/qmake-variable-reference.html#qmake-host

【讨论】:

  • 以防万一,如果您在 raspberry-pi 上构建应用程序,这将起作用。这不适合交叉编译。
  • 对于交叉编译情况,您可以使用此检查 contains(QMAKE_CXX, .*raspbian.*arm.*)(因为您的 QMAKE_CXX 看起来像 ~/.../tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++
【解决方案2】:

当前用于 RPi3 的 Raspbian OS(32 位)报告 QMAKE_HOST.archarmv7l,而较旧的 bo​​ard\OS 可以报告 armv6l

在构建 64 位时,例如 UbuntuMate for RaspberryPi:aarch64

【讨论】:

    【解决方案3】:

    好的, 似乎没有人有答案,所以我做了一个适合我的解决方法,如果它适合你,我会很高兴。

    在执行qmake的时候我聚合了一个flag,例如

    qmake CONFIG+=MQ_ARM -r
    

    它将执行 qmake recursive 并将标志传递给每个 .pro 文件。

    您可以在 .pro 文件中添加以下内容:

    MQ_ARM {
        LIBS +=bla bla
        message(USING ARM LIBRARY)
    } else:MQ_i686 {
        LIBS +=bla bla
        message(USING 32bits LIBRARY)
    }
    else {
        LIBS +=bla bla bla
        message(qmake configurated as x86_64 if you want another conf use qmake CONFIG+=MQ_ARM project.pro -
    }
    

    您可以分离到另一个文件 project.pri 并使用 include(project.pri) 包含在所有子项目 .pro 文件中

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 2014-01-18
      • 2015-06-19
      相关资源
      最近更新 更多