首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CMake实现Windows下的跨平台构建

问使用CMake实现Windows下的跨平台构建
EN

Stack Overflow用户
提问于 2013-06-10 16:31:50
回答 2查看 11.7K关注 0票数 10

我正在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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-16 20:32:27

如果你进行交叉编译,你会想要看这里:cmake-toolchains(7)。然而,我建议你在你的windows机器上安装一个像虚拟机器一样的Linux虚拟机,并在Linux上进行简单的构建。它的编译速度会快得多,而且你不必担心交叉编译。您可以从linux VM挂载windows磁盘,以便共享相同的源树。linux虚拟机的编译速度要比在windows下运行的gcc快得多。

票数 8
EN

Stack Overflow用户

发布于 2013-06-11 07:16:41

你对CMake的理解是正确的.它将根据CMakeLists.txt文件中的规则确定如何创建您请求的构建系统(或者是您当前所在平台的默认构建系统)。但是,如果您没有安装可以面向linux的程序,那么这不一定能帮助您在windows计算机上编译linux。

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

代码语言:javascript
复制
CC=gcc-linux CXX=g++-linux cmake . [options]

这将告诉CMake找到专门针对linux的编译器。希望在用这些编译器编译之后,你就可以在linux上运行了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17019788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档