我正在Windows32位(使用MSVC++)上用C++开发一个软件,但由于我希望能够在所有平台上使用我的软件,我决定使用CMake作为我的构建生成器。
因此,我在CMake方面还只是个初学者。从CMake教程中,我了解到为了交叉编译代码,首先应该在主机平台上安装一个模拟目标平台的工具链。然后,使用该工具链提供的适当的目标平台C和C++编译器,CMake将能够生成makefile等。
现在,我想在Win32平台上构建适用于Linux平台(GNU/Linux)的代码。我尝试使用CMake和Cygwin结合使用,并使用gcc和g++作为编译器来执行上述过程。它构建得很好,创建了makefile,当我在Cygwin终端发出"make“命令时,生成的makefile就是”make“。现在我得到了一个可执行文件,我希望它能在Linux平台上运行。但是在Linux上我得到一个错误: bash不能执行二进制文件。
通过命令文件可执行名,实现了由上述程序生成的可执行文件为PE32类型,仅适用于Windows。
现在我的问题是:我对使用cmake的跨平台构建过程的理解是正确的吗?或者我应该使用windows下的另一个Linux工具链来获得Linux ELF可执行文件?你脑海中浮现出哪些工具链能给我想要的东西?
非常感谢
Setareh
发布于 2013-06-16 20:32:27
如果你进行交叉编译,你会想要看这里:cmake-toolchains(7)。然而,我建议你在你的windows机器上安装一个像虚拟机器一样的Linux虚拟机,并在Linux上进行简单的构建。它的编译速度会快得多,而且你不必担心交叉编译。您可以从linux VM挂载windows磁盘,以便共享相同的源树。linux虚拟机的编译速度要比在windows下运行的gcc快得多。
发布于 2013-06-11 07:16:41
你对CMake的理解是正确的.它将根据CMakeLists.txt文件中的规则确定如何创建您请求的构建系统(或者是您当前所在平台的默认构建系统)。但是,如果您没有安装可以面向linux的程序,那么这不一定能帮助您在windows计算机上编译linux。
要针对linux进行编译,您需要使用linux编译器。link posted by @stjin告诉你如何在cygwin上安装一个。然后,要设置您的CMake构建,请在终端中执行以下操作:
CC=gcc-linux CXX=g++-linux cmake . [options]这将告诉CMake找到专门针对linux的编译器。希望在用这些编译器编译之后,你就可以在linux上运行了。
https://stackoverflow.com/questions/17019788
复制相似问题