c++ - 如何用CMake交叉编译qt应用

标签 c++ qt cmake cross-platform cross-compiling

情况是:

Linux 主机上有针对不同平台编译的 qt 应用程序:Linux、Windows、Android(很快和 Mac)。我需要在 Linux 主机上为所有平台构建一个应用程序。

我使用了 qmake,那里的一切都非常简单,调用 qmake 并将 -spec 传递给它就足够了。 Qmake 自己编写了变量的必要路径,一切正常。

现在我正在切换到 CMake,但我在调用 CMake 时遇到了困难。如何为特定平台构建应用程序?

  • CMake有没有类似qmake中的“spec”的可能性?

  • 或者我需要手动设置所有变量(我无法实现这样的方法)?

最佳答案

qmake -spec 选项的 CMake 等效项本质上是 -G(对于“生成器”)命令行 option .这将告诉 CMake 哪个 generator使用。 CMake 生成器负责生成 native 构建系统文件(例如 Unix Makefile、Visual Studio 项目文件等),因此它是一个依赖于平台的设置。例如,

cmake -G "Unix Makefiles" ..

与 qmake 不同,您可以在其中指定平台/编译器信息的路径,您可以直接告诉 CMake 从支持的生成器列表中选择哪个生成器。 CMake documentation方便地将支持的生成器列表分解为命令行IDE 组。如果您没有明确选择生成器,CMake 将使用基于当前平台的默认生成器。

CMake 还提供了额外的选项(可以与 -G 一起使用)来进一步指定哪个工具集(-T)或平台(-A) 与生成的构建系统一起使用。工具集和平台规范可以告诉构建系统选择哪个特定编译器或 SDK。例如,我们可以使用以下命令告诉 CMake 使用 Visual Studio 2019 为具有 Win32 平台(体系结构)的应用程序准备构建环境:

cmake -G "Visual Studio 16 2019" -A Win32 ..

或者我们可以通过指定以下内容将体系结构更改为 64 位:

cmake -G "Visual Studio 16 2019" -A x64 ..

我鼓励您通读链接的文档,以了解有关如何控制 CMake 的构建系统和编译器选择设置的更多信息。

关于c++ - 如何用CMake交叉编译qt应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58221909/

相关文章:

C++ - 如何从可变数量的基数中引入重载集。

android - 为Android和iOS制作一个应用程序的最佳方法和工具是什么?

qt - 在运行模式下启用 Qt Creator 以创建核心文件?

cmake - KDE 安装目录

ubuntu - 如何从源代码为 CMake 构建 .deb 文件?

gcc - cmake 检测哪个库 libc++ 或 libstdc++ 配置为用于 g++ 或 clang++

c++ - 如何在嵌入式 v8 中解析 JSON?

c++ - 如何使用 clang 从 TagDecl 获取结构成员

c++ - 抄袭检测-风选算法-指纹冲突

c++ - QCharts - 在 QLineSeries 中创建一个中断(空值)