使用CMake在Windows下针对Linux进行跨平台构建

时间:2013-06-10 08:31:50

标签: linux build cmake cross-platform toolchain

我正在Windows 32位上使用C ++开发一个软件(使用MSVC ++),但由于我希望能够在每个平台上使用我的软件,所以我决定使用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可执行文件?你会想到哪些工具链会给我我想要的东西?

非常感谢

Setareh

2 个答案:

答案 0 :(得分:5)

如果你进行交叉编译,你会想看这里:https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/CrossCompiling。但是,我建议您在Windows机器上安装类似虚拟机的Linux VM,并在Linux上进行天真的构建。它编译速度更快,您不必担心交叉编译。您可以从Linux VM安装Windows磁盘,以便共享同一个源树。 linux VM的编译速度比在windows下运行的gcc快得多。

答案 1 :(得分:0)

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

要编译目标linux,您需要使用linux编译器。 link posted by @stjin告诉您如何在cygwin上安装一个。然后,要设置CMake构建,请在终端中执行此操作:

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

这将告诉CMake找到特殊的linux目标编译器。 Hopefuly,在使用这些编译器编译后,您将能够在linux上运行。