我正在查看Qt随附的configure脚本可以运行的所有选项。 (特别是qt-everywhere-opensource-src-5.2.0)。

经过大量搜索后,我确定这些资料充其量也未得到很好的记录,因此我希望可以得到一些帮助。当我查看prefixsysroot配置选项的描述时:



因此,我以前使用过-prefix,它的功能完全如上所述。它将所有内容放置在提供的<dir>上,然后当我使用<prefix_dir>/bin/qmake构建应用程序并将其安装在目标平台上时,它想在<prefix_dir>/lib上找到所有共享的对象库。

我的印象是,如果我使用-sysroot,它将在<sysroot_dir>上安装所有内容,然后在目标平台上安装我的应用程序时,它将在/lib中搜索。至少我希望那是真的。

现在,如果我的假设是正确的...那么-extprefix的意义是什么?他们是说如果我同时使用-sysroot-extprefix可以将事情重定向到有利的地方吗?

那我为什么要使用-no-gcc-sysroot的原因是什么?如果我希望将Qt库安装在“sysroot”上,为什么不希望gcc使用/知道相同的sysroot?

如果可以得到一些有关如何正确使用这些选项的实际示例,对其中一些的解释将是非常棒的,甚至更好。

最佳答案

这些是构建嵌入式平台时使用的选项。
是的,他们是皇家一团糟。所以这只是部分答案:

-字首

  • 尝试并证明了Qt整个安装过程中用/usr/lib代替/usr/local/lib或类似的方式
  • 当为当前正在运行的平台构建Qt时(通常在台式机上)

  • -sysroot/路径
  • 打算为未在/
  • 中安装的系统构建Qt
  • 例如-sysroot〜/mysystem,其中〜/myssytem包含
    /lib/bin等...
  • 将--sysroot传递给其他工具,例如gcc和pkg-config,因此它们将在〜/mysystem/lib而不是/lib中搜索其依赖项

  • -extprefix/b

    使用-sysroot/a时,
  • ,不要实际写入/a
  • 将qt写到/b而不是
  • 这旨在与只读sysroots交叉编译

  • -no-gcc-sysroot
  • 针对--sysroot
  • 内部找不到自己的crt的编译器的一种非常特定的技巧
  • 将sysroot传递给pkgconfig和其他人,但不传递给gcc
  • ,以便可以使用-L/sysroot/lib/正确地调用gcc,但不要在此处尝试查找隐式路径(crt)。

  • -hostprefix/路径

    编译与我们目前在上运行的目标不同的目标时的
  • qmake将是主机体系结构(例如x86),而qt本身将是目标体系结构(比如说arm)
  • ,因此将qmake放在/path而不是-sysroot指定的目标系统中。在目标系统
  • 上没有任何用处

    要增加困惑,请执行以下操作:

    -R/路径
  • 设置链接程序运行路径-例如QtGui查找QtCore的位置-与其他所有选项无关

  • 在为目标而不是主机进行编译时要使用哪些标志,取决于configure中大量的硬编码假设。

    通常,-sysroot plus -prefix应该适用于大多数使用情况。

    即,当您有:
     $ ls ~/mytarget
     lib bin share dev
    

    您可以只使用-sysroot〜/mytarget -prefix/

    10-01 11:40