前言
要达到c++跨平台开发目的,我打算从为什么C++不能跨平台开发和如何实现跨平台开发这两个方面入手
为什么C++不能跨平台开发
C++不能跨平台,不是指源程序不能跨平台,而是可执行文件不能跨平台。
因为C++源程序要经过预处理、编译、汇编和链接过程才生成可执行文件,但由于这过程中会受到平台限制,如汇编语言有不同版本,和平台有关(CPU、操作系统和编译器等);所以不能将windows平台生成的exe扔到Linux平台运行。
C++ 本身只是一种语言,并无“跨平台”与“不跨平台”之分。所谓“不跨平台”,只是编译出来的目标代码是机器相关的而已。
而与java相比较,C++编译是一步到位的,直接生成了机器可执行文件,而java编译是生成的中间文件,可以放到各个操作系统所定制的java虚拟机中去,之后再进一步编译成机器语言并执行,所以Java可跨平台,它的跨平台是建立在有对应JVM基础之上的。
参考文章:
https://blog.csdn.net/m0_37738114/article/details/105092315
如何实现跨平台开发
既然c++不能跨平台开发原因是在于从源码到可执行文件过程依赖于平台,而与源码没关系,那么只要选择一个编译过程不依赖平台的编译方式就可以解决问题~
visual studio 2019可以创建c++跨平台项目,官方文档链接为:https://docs.microsoft.com/en-us/cpp/build/get-started-linux-cmake?view=vs-2019
简单点来说就是,在安装了支持在Linux环境下开发c++的visual studio 2019中可以创建跨平台项目。操作如下:
点击下一步完成后,就成功创建一个跨平台的项目,我们就可以在这个项目中编码了~
CMake项目文件介绍
官网文档:https://docs.microsoft.com/en-us/cpp/build/cmake-projects-in-visual-studio?view=vs-2019
CMake是一个开放源代码,跨平台的工具系列,旨在构建,测试和打包软件。CMake用于使用简单平台和与编译器无关的配置文件来控制软件编译过程,并生成可在您选择的编译器环境中使用的本机makefile和工作区。
CMake is powerful.
- CMake supports multiple development environments and compilers on the same project (e.g., Visual Studio IDE, QtCreator, JetBrains, vim, emacs, gcc, MSVC, clang, Intel)
- CMake supports multiple languages including C/C++/CUDA/Fortran/Python, and also supports running arbitrary custom commands as part of the build
- CMake supports continuous integration (CI) testing in concert with Jenkins, Travis, CircleCI, GitlabCI, and almost any CI system via CTest. Test results are displayed using CDash (www.cdash.org).
- CMake supports integration of 3rd party libraries into your project.
参考CMake官网链接:https://www.kitware.com/build-with-cmake-build-with-confidence/
由CMake特性可知,它是从编译过程不依赖平台从而实现跨平台。
配置vs2019的CMake项目属性
CMake项目是通过CMakeLists.txt配置编译链接属性:
# CMakeList.txt: CMakeProject2 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)
# 将源代码添加到此项目的可执行文件。
add_executable (CMakeProject2 "CMakeProject2.h" "CMakeProject2.cpp" "test.cpp")
# TODO: 如有需要,请添加测试并安装目标。
当在解决方案资源管理器的项目添加新项,当添加cpp文件,CMakeList.txt会自动更新新增cpp文件
个人猜想,当选择编译方式为Linux编译环境后会自动生成对应的CMakeLists.txt(该部分待实验)
Linux下的配置:https://docs.microsoft.com/en-us/cpp/linux/cmake-linux-project?view=vs-2019
总结
其实纯粹的c++语言可以跨平台开发,只要它的编译过程不依赖于平台即可,而CMake工具是不依赖平台的编译工具,因此用CMake编译c++项目就可以达到跨平台目的。
注:c++是编译语言,而VC++是编程环境,即IDE,是windows 下开发人员使用的专业C++SDK,专业软件开发平台
PS:代码相关的规范见:https://blog.csdn.net/Quellaaa/article/details/105537040