10

我正在 Windows 32 位(使用 MSVC++)上用 C++ 开发一个软件,但是因为我希望能够在每个平台上使用我的软件,所以我决定使用 CMake 作为我的构建生成器。

因此,我仍然只是 CMake 的初学者。从 CMake 教程中,我了解到为了交叉编译代码,首先应该在主机平台上安装一个模拟目标平台的工具链。然后使用此工具链提供的适当目标平台 C 和 C++ 编译器,CMake 将能够生成 makefile 等。

现在,我想在 Win32 平台上为 Linux 平台(GNU/Linux)构建我的代码。我尝试使用 CMake 结合 Cygwin 并使用 gcc 和 g++ 作为编译器来执行上述过程。它构建良好,创建了 makefile,当我在 Cygwin 终端中发出“make”时,生成的 makefile 被“制作”了。现在我有了一个我希望能在 Linux 平台上运行的可执行文件。但在 Linux 上出现错误:bash 无法执行二进制文件。

使用命令文件executablename,我意识到上述程序生成的可执行文件是PE32类型的,仅适用于Windows。

现在我的问题是:我对使用 cmake 的跨平台构建过程的理解是否正确?或者我应该在 windows 下使用另一个 Linux 工具链来获取 Linux ELF 可执行文件?您会想到哪些工具链可以满足我的需求?

非常感谢

塞塔雷

4

2 回答 2

8

如果你进行交叉编译,你会想看这里:cmake-toolchains(7) 。但是,我建议您在 Windows 机器上安装类似虚拟机的 Linux VM,并在 Linux 上天真地构建。它将编译得更快,您不必担心交叉编译。您可以从 linux VM 挂载 Windows 磁盘,以便共享相同的源代码树。linux VM 的编译速度将比在 windows 下运行的 gcc 快得多。

于 2013-06-16T12:32:27.343 回答
1

您对 CMake 的理解是正确的......它将根据您CMakeLists.txt文件中的规则确定如何创建您请求的构建系统(或您当前所在平台的默认构建系统)。但是,如果您没有安装可以针对 linux 的东西,这不一定会帮助您在 windows 机器上为 linux 编译。

要针对 linux 进行编译,您需要使用 linux 编译器。@stjin 发布的链接告诉您如何在 cygwin 上安装一个。然后,要设置您的 CMake 构建,请在终端中执行以下操作:

CC=gcc-linux CXX=g++-linux cmake . [options]

这将告诉 CMake 定位特殊的 linux 目标编译器。希望,在使用这些编译器编译之后,您将能够在 linux 上运行。

于 2013-06-10T23:16:41.360 回答