Qt的sysroot和prefix选项是一个实际的例子

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

经过相当多的search,我已经确定这个东西是最好的logging,所以我希望我能得到一些帮助。 当我查看prefixsysrootconfiguration选项的描述时:

〜/ qt-everywhere-opensource-src-5.2.0 $ ./configure -help | grep“sysroot”
-extprefix <dir> …使用-sysroot时,将所有内容安装到<dir>
-sysroot <dir> ……将<dir>设置为目标编译器和qmake的sysroot,并设置pkg-configpath。
-no-gcc-sysroot …..当使用-sysroot时,它会禁止传递–sysroot到编译器

〜/ qt-everywhere-opensource-src-5.2.0 $ ./configure -help | grep“前缀”
-prefix <dir> ……这将安装与<dir>
-extprefix <dir> …使用-sysroot时,将所有内容安装到<dir>
-hostprefix [dir]开发时需要的工具和库

所以我之前使用了-prefix ,并且完全按照所述进行了操作。 它将所有内容放在提供的<dir> ,然后当我使用<prefix_dir>/bin/qmake构build我的应用程序并将其安装在我的目标平台上时,它希望find<prefix_dir>/lib处的所有共享对象库。

我的印象是,如果我使用-sysroot它会将所有东西安装在<sysroot_dir>然后当我在目标平台上安装我的应用程序时,它将在/libsearch。 至less我希望这是真的。

现在如果我的假设是正确的,那么-extprefix什么-extprefix呢? 他们是否说,如果我可以redirect的地方好事,如果我同时使用-sysroot-extprefix

那么为什么我要使用-no-gcc-sysroot呢? 如果我想我的Qt库安装在“sysroot”为什么我不希望gcc使用/知道相同的sysroot?

如果我能得到一些关于如何正确使用这些选项的实际例子,那么对这些中的一些的解释会很好,甚至更好。

Solutions Collecting From Web of "Qt的sysroot和prefix选项是一个实际的例子"

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

-字首

  • 经过验证的方式说/ usr / lib而不是/ usr / local / lib或类似的整个安装Qt
  • 当Qt是为当前正在运行的平台而建立的(通常用于桌面)

-sysroot /路径

  • 打算建立一个没有安装在/
  • 例如-sysroot〜/ mysystem,其中〜/ myssytem包含/ lib / bin等…
  • 会将其他工具(如gcc和pkg-config)传递给–sysroot,因此他们将在〜/ mysystem / lib中搜索它们的依赖关系,而不是/ lib

-extprefix / b

  • 当使用-sysroot / a时,实际上不要写入/ a
  • 写qt到/ b来代替
  • 这是为了与只读的sysroots进行交叉编译

-no-GCC-SYSROOT

  • 非常具体的黑客编译器,无法找到自己的CRT内–sysroot
  • 将sysroot传递给pkgconfig等,但不传给gcc
  • 所以gcc将被正确调用-L / sysroot / lib /,但是并不试图在这里找到隐式路径(crt)。

-hostprefix /路径

  • 当编译一个不同于我们目前正在运行的目标
  • qmake将是主机架构(例如x86),而qt本身将是目标架构(可以说是arm)
  • 所以把qmake放在/ path而不是由-sysroot指定的目标系统。 这对目标系统没有任何用处

为了增加混乱:

-R /路径

  • 设置连接器runpath – 这是QtGui找到QtCore例如 – 独立于所有其他选项

当编译目标而不是你的主机时,你想使用哪个标志,取决于配置中的一系列硬编码假设。

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

即当你有:

  $ ls ~/mytarget lib bin share dev 

你可以使用-sysroot〜/ mytarget -prefix /

一个实际的例子就是交叉编译Raspberry Pi的Qt,然后创建一个“姐妹”套件添加到Qt Creator中。

安装Pi的根文件系统后,下面的命令在Pi上安装Qt:

  ./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=$RPI_TOOLCHAIN -sysroot $RPI_SYSROOT -opensource -confirm-license -optimized-qmake -reduce-exports -release -make libs -prefix /usr/local/qt-5.5.1-pi -skip qtwebkit 

以下命令然后使用Pi的根文件系统在桌面上安装二进制文件。

  ./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=$RPI_TOOLCHAIN -sysroot $RPI_SYSROOT -opensource -confirm-license -optimized-qmake -reduce-exports -release -make libs -extprefix /usr/local/qt-5.5.1-pi -skip qtwebkit 

请注意,唯一的区别是使用-extprefix而不是-prefix来指导安装位置。

注意通过在同一行中指定prefix和extprefix,可以同时在主机和目标上安装Qt

现在您可以通过指定您的qmake路径,设备,编译器,调试器和sysroot,将此套件添加到您的Qt Creator。 因此,您可以在桌面上创建一个qt项目,然后根据您选择的套件在桌面或pi上构建和运行。