我使用的是 Windows 7 - 32位 操作系统。
我想要将我的简单C++源代码编译成适用于所有操作系统和架构的可执行文件。
我想要从我的操作系统编译以下操作系统:
- Windows 32
- Windows 64
- Linux 32
- Linux 64
- OSX 32
- OSX 64
是否有可能实现?
注意: 我需要在Win7 32位下为所有操作系统编译C++。
我使用的是 Windows 7 - 32位 操作系统。
我想要将我的简单C++源代码编译成适用于所有操作系统和架构的可执行文件。
我想要从我的操作系统编译以下操作系统:
是否有可能实现?
注意: 我需要在Win7 32位下为所有操作系统编译C++。
在目标操作系统上编译比交叉编译要容易得多。你需要的是每个操作系统的工具链和一个“make”工具。CMake拥有强大的交叉编译功能。这不是必需的,但可以节省一些钱:获取虚拟化软件(例如VMWare Player是免费的),并在不同的操作系统上运行。
我建议使用clang(OSX)、gcc(Linux)和TDM gcc(Windows)作为工具链(MSVC也很好,但不免费)。32位和64位之间的区别不应该是问题。当你使用不同的编译器时,我建议你打开最严格的编译器标志,以便保持标准。
我还建议您在某处使用连续集成服务器,每个操作系统目标和架构都有一个客户端。这将缓解在一个操作系统中进行的不兼容更改的痛苦。您还可以通过软件包管理器或安装程序来确保安装。
只需搜索网络以了解更多有关交叉编译、工具链和连续集成的信息。
你需要类似于auto tools或CMake的构建系统,我建议使用后者。有一个名为cookiecutter的Python工具,它允许你使用Python(即BoilerplatePP
模板)创建一个简单的CMake/C++模板项目。在该链接中,你可以找到如何使用它创建起始项目的说明。最初的项目应该看起来像这样:
$ tree cpp/
cpp/
├── CMakeLists.txt
├── README.md
├── include
│ └── Calculator.hpp
├── src
│ ├── CMakeLists.txt
│ └── Calculator.cpp
├── test
│ ├── CMakeLists.txt
│ └── CalculatorTests.cpp
└── thirdparity
└── catch
└── include
└── catch.hpp
CMake 从2.6版本开始支持交叉编译。阅读本文可深入了解此问题。 祝你好运。
你可以开始使用CMake,并使你的项目准备好在所有操作系统上进行编译。
在某些特殊情况下,您需要适应您的代码,包括预处理器检查您正在使用的操作系统。例如:
#ifdef WIN32
//do some stuff for Windows
#elif __APPLE__
//do some stuff for Apple
#elif __linux__
//do stuff for Linux
#endif
你可以在这个链接中找到所有预定义宏的列表。
要使用你的Win7 32位交叉编译所有内容,你可以使用GCC交叉编译器。 目前,在Windows、Mac和Linux上,GCC或CLANG是唯一可用的编译器。 如果你想为除了Windows 32位之外的其他目标构建项目,请参阅此wiki。
在使用Windows 10操作系统的情况下,通过CLion
集成开发环境和WSL
功能,实现编写代码时使用Linux编译器工具链(通常为GCC
),并在Windows主机上进行工作。然后,您当然也可以切换到像MinGW
这样的Windows工具链,或者使用Visual Studio
与MSVC
再次进行编译,以获取您的Windows二进制文件。
Windows
一样。有些人说WSL
是Microsoft
近年来做的最好的事情之一。确实,它非常适合跨平台C/C++
开发。OS X
编译,因此您仍然需要拥有一个Mac
或运行OS X
的虚拟机,不幸的是。Golang提供简单的交叉编译(指定$GOOS和$GOARCH并运行"go build");根据您的要求(例如,您需要硬实时操作系统),它可能是合适的工具。
CMake被用作元语言,因为它抽象了所有工具链和操作系统依赖项。当然它很有用,但第一次使用可能会很困难...
实际上,你需要的是CMake在幕后使用的东西: 1. 每个目标操作系统的编译器 2. 一个良好编写的makefile
你可以打开标志来修改makefile的行为,或者如果你真的想要简化版本,只需在构建代码时调用正确的编译器(针对所需的操作系统)。