【发布时间】:2013-06-05 20:48:47
【问题描述】:
我正在 Windows 32 位(使用 MSVC++)上用 C++ 开发软件,但由于我希望能够在每个平台上使用我的软件,我决定使用 CMake 作为我的构建生成器。
因此,我仍然只是 CMake 的初学者。从 CMake 教程中,我了解到为了交叉编译代码,首先应该在主机平台上安装一个模拟目标平台的工具链。然后使用此工具链提供的适当目标平台 C 和 C++ 编译器,CMake 将能够生成 makefile 等。
现在,我想在 Win32 平台上为 Linux 平台(GNU/Linux)构建我的代码。我尝试使用 CMake 结合 Cygwin 并使用 gcc 和 g++ 作为编译器来执行上述过程。它构建良好,创建了 makefile,当我在 Cygwin 终端中发出“make”时,生成的 makefile 是“made”的。现在我有了一个我希望能在 Linux 平台上运行的可执行文件。但在 Linux 上出现错误:bash 无法执行二进制文件。
使用命令文件executablename,我发现上面程序生成的可执行文件是PE32类型的,仅适用于Windows。
现在我的问题是:我对使用 cmake 的跨平台构建过程的理解是否正确?或者我应该在 windows 下使用另一个 Linux 工具链来获取 Linux ELF 可执行文件?您会想到哪些工具链可以满足我的需求?
非常感谢
塞塔雷
【问题讨论】:
-
我不了解 cmake,但 qmake 有针对不同平台的“构建配置文件”。也许,您应该在 cmake 文档中搜索“目标平台”选项,或类似的东西。
-
@IvanKolmycheck 谢谢,您是否仍然需要在您的主机平台上有一个工具链来为不同的目标平台构建,或者您是否只是在 qmake 中指定“构建配置文件”,然后 qmake 会为目标平台?我的意思是,您的 mkspecs 中列出的编译器是否可以直接通过 qmake 使用,或者是否还涉及其他一些程序(如第三方工具链)?
-
@user2470116 Qmake 自动生成工具链的 makefile,但仍需要通过您的发行版包管理器安装。
标签: linux build cmake cross-platform toolchain