前言

要达到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

https://bbs.csdn.net/topics/10161854?depth_1-utm_source=distribute.pc_relevant_right.none-task-discussion_topic-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant_right.none-task-discussion_topic-BlogCommendFromBaidu-1

 

如何实现跨平台开发 

既然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

Logo

智屏生态联盟致力于大屏生态发展,利用大屏快应用技术降低开发者开发、发布大屏应用门槛

更多推荐