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

标签 linux build cmake cross-platform toolchain

我正在 32 位 Windows(使用 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 无法执行二进制文件。

通过command file executablename,我发现用上面的程序制作的可执行文件是PE32类型,只适用于Windows。

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

非常感谢

雪花

最佳答案

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

关于linux - 使用 CMake 在 Windows 下针对 Linux 进行跨平台构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17019788/

相关文章:

android - 如何在 Linux (Ubuntu) 上启用 Kindle Fire 的 USB 调试?

linux - 附加到 vsftpd 的 ptrace 挂起

powershell - 如何从 TFS 构建过程将参数传递给 PowerShell 脚本?

r - 从不正确的 .Rbuildignore 文件构建后,包中缺少 Collat​​e 字段中的文件

visual-studio-2013 - 如何以使用/MP 选项生成 Visual Studio 2013+ 项目文件的方式配置 cmake

C++ 在环境变量 RC 中找不到编译器集

Java进程在Linux上被卡住(?)

创建新信号或复用 SIGALRM?

opencv - 为 CARMA 问题构建 Opencv-2.4.5

python - python 2 和 3 的目录位置