作为一名产品开发,一套顺手的集成开发环境必不可少。大多数时候,开发经理将精力投入在产品需求分析上而忽视了研发质量甚至连基本的集成开发环境都没有统一。当然,如果你们的项目仅仅需要部署在单一的环境中或没有跨语言开发需求,通常这样做还不会造成严重问题。可是一旦你需要面对一套相对复杂的系统,异构系统间的通讯等问题。在项目开始阶段,统一各个部分的集成开发环境非常重要。我将通过一系列的文章向你介绍我在企业级开发工作中使用的解决方案。当然,这些都是可能都包含了强烈的个人特色,不见得完全适用于所有的企业,甚至有些观点也值得商榷。只希望能够起到一个抛砖引玉的作用,有兴趣的小伙伴一起探讨。

目前,我所担任的工作主要包含了轻量化的桌面系统,浏览器端以及基于Linux系统的底层通信开发。需要使用的语言包括Java、C++和JavaScript。没有分布式和大数据的需求。需要开发底层通信的原因主要是,我们有大量的数据是直接通过硬件设备来获取,因此这部分的工作主要使用C++来完成,业务层考虑到部署和开发的效率偏重使用Java来实现,前段没有太多的选择JavaScript是不二之选。

首先阐述一下Java和C++这两门语言的开发适应性问题。由于企业和个人定位的缘故,我对这两门主流语言都有一定的开发经验,遇见过各种奇葩需求也实现过各种神奇功能。相对来说,较小的底层功能模块处于运算效率的考量,我会偏向于使用C++来做。而针对业务系统,服务组件或需要超过10人以上的团队来合作开发的项目Java依然是我的唯一选择。无论是企业还是个人开源,你所面对的开发任务更倾向于特定需求而非科研,使用C++作为开发语言,无论你的开发经验多么丰富都势必会陷入语言特性所造成的泥沼中无法自拔。相比较而言,牺牲一些机器性能所换来的是更快的迭代、更少的BUG和更丰富的生态。因此作为一名开发工程师,无论如何不要墨守成规,新技术或新语言可能只需要1行代码就能轻松解决你在5年前需要100行代码才能完成的任务,如果这时你还以前辈自居,那么离被市场淘汰也就不远了。

接下来言归正传,Linux下的C++开发工具很多,有人习惯用vim也有人会使用QtCreator或其他乱七八糟的IDE。而我更推荐使用微软的开发神器Visual Studio Code,与其它的产品相比它足够轻量级也更加灵活。唯一不太方便的是,用它开发基于Qt的产品不合适。不过我在前面已经阐述,界面端使用JavaScript才是更加合理的选择。

安装完成以后,你需要一个C++插件,这里推荐微软的官方版本:

完成以后就可以和你的小伙伴们开心的工作了。那么,如何进行编译和调试呢?其实vsc本身提供了配置文件来完成这些任务。不过我并不推荐你去学习它。我更建议你通过Makefile来完成这项传统工作,因为这样做会使得你的工程具备更广泛的适应性。这也就是为什么,很多人推荐在Linux下使用vim来作为开发工具的原因,不过直接使用vim,开发效率实在太低。

最后介绍一下如何调试。相信如果你在网上搜索Linux vsc debug几个关键字,会跳出很多答案,不过这些都不是我喜欢的。我们使用vsc的初衷是使开发变得高效和简单,任何多余的配置都应该放弃。既然我们已经采用了make和Makefile作为我们的编译工具,只需要将gdb作为编译条件即可获得调试版本。然后我们为vsc增加一个配置文件launch.json,具体生成的方法网上有。然后将“program”对应的值设置为Makefile文件中指定的生成名。

 F5即可进行断点调试。

最后提交代码的时候,只需要源码文件和对应的Makefile即可。

Linux C++轻量级开发指南的更多相关文章

  1. C#在Linux上的开发指南

    本人才疏学浅,在此记录自己用C#在Linux上开发的一点经验,写下这篇指南.(给想要在Linux上开发C#程序的朋友提供建议) 目前在Linux上跑的网站:http://douxiubar.com | ...

  2. C#在Linux上的开发指南(续)

    续之前的一篇开发指南http://www.cnblogs.com/RainbowInTheSky/p/5496777.html 部分人在部署的时候经常出现dll兼容问题(其实可以看小蝶惊鸿的文章,蝶神 ...

  3. [翻译]现代java开发指南 第二部分

    现代java开发指南 第二部分 第二部分:部署.监控 & 管理,性能分析和基准测试 第一部分,第二部分 =================== 欢迎来到现代 Java 开发指南第二部分.在第一 ...

  4. [转帖]2019 简易Web开发指南

    2019 简易Web开发指南     2019年即将到来,各位同学2018年辛苦了. 不管大家2018年过的怎么样,2019年还是要继续加油的! 在此我整理了个人认为在2019仍是或者将成为主流的技术 ...

  5. java web轻量级开发面试教程

    最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备 在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间.我的标准其实不复杂:第一能干活,第二 ...

  6. 开源项目SMSS开发指南(二)——基于libevent的线程池

    libevent是一套轻量级的网络库,基于事件驱动开发.能够实现多线程的多路复用和注册事件响应.本文将介绍libevent的基本功能以及如何利用libevent开发一个线程池. 一. 使用指南 监听服 ...

  7. Jetty使用教程(四:21-22)—Jetty开发指南

    二十一.嵌入式开发 21.1 Jetty嵌入式开发HelloWorld 本章节将提供一些教程,通过Jetty API快速开发嵌入式代码 21.1.1 下载Jetty的jar包 Jetty目前已经把所有 ...

  8. JVM 平台上的各种语言的开发指南

    JVM 平台上的各种语言的开发指南 为什么我们需要如此多的JVM语言? 在2013年你可以有50中JVM语言的选择来用于你的下一个项目.尽管你可以说出一大打的名字,你会准备为你的下一个项目选择一种新的 ...

  9. Linux静态库生成指南

    Linux静态库生成指南   Linux上的静态库,其实是目标文件的归档文件.在Linux上创建静态库的步骤如下: 写源文件,通过 gcc -c xxx.c 生成目标文件. 用 ar 归档目标文件,生 ...

随机推荐

  1. C++ lambda的演化

    翻译自https://www.bfilipek.com/2019/02/lambdas-story-part1.html与https://www.bfilipek.com/2019/02/lambda ...

  2. Vert.x Web 文档手册

    Vert.x Web 中英对照表 Container:容器 Micro-service:微服务 Bridge:桥接 Router:路由器 Route:路由 Sub-Route: 子路由 Handler ...

  3. 小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式:

    小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式: 直接引用VUE; 将vue.js下载到本地后本目录下使用; 安装Node环境下使用; ant-desig ...

  4. Factory Method工厂方法模式

    定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类,属于创建型模式 在此模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类负责生产 ...

  5. FreeSql (十六)分页查询

    IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.MySql, "Data ...

  6. eclipse搭建springmvc

    https://www.cnblogs.com/qixing/p/qixing.html

  7. JAVA面试问题与解答(1-15)

    Q1.内部类和子类之间有什么区别? Ans:Inner类是嵌套在另一个类中的类.内类具有嵌套它的类的访问权限,并且它可以访问外部类中定义的所有变量和方法. 子类是从另一个名为super class的类 ...

  8. 使用python合并excel

    当工作碰到需要将几个excel合并时,比如一个表,收集每个人的个人信息,陆续收回来就是十几张甚至几十张表,少了还好解决,但是很多的话就不能一个一个去复制了,这时候就想到了python,Python大法 ...

  9. 02.Django基础二之URL路由系统

    一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这 ...

  10. spring注解方式,异常 'sessionFactory' or 'hibernateTemplate' is required的解决方法

    做单元测试的时候,抛出异常 Caused by: java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' ...