Ubuntu c/c++ 开发环境

Ubuntu c/c++ 开发环境

在Ubuntu下搭建C/C++编程环境,综合起来说就是vim+gcc+gdb。其中vim用于文本编辑,gcc用于程序编译,gdb用于代码调试。

在Terminal中执行sudo apt-get install build-essential,即可安装必要的库函数。

 

文本编辑

Ubuntu自带的为vi编辑器,vim是vi的升级版,兼容vi。

1、安装

sudo apt-get install vim

2、常用指令

vim有三种模式
1.普通模式

当vim打开的时候就直接进入普通模式,在普通模式下可以执行删除、复制等指令

a , o ,i

2.插入模式 

插入模式可以编辑文本

Esc 键进入普通模式

3.命令模式

普通模式输入“:”(冒号)进入命令模式,此时在文本界面最下面一行可以输入相关命令,可以设置文本的保存退出方式等

普通模式常用下指令

  • i → Insert 模式,按 ESC 回到 Normal 模式.
  • x → 删当前光标所在的一个字符。
  • :wq → 存盘 + 退出 (:w 存盘, :q 退出)   (陈皓注::w 后可以跟文件名)
  • dd → 删除当前行,并把删除的行存到剪贴板里
  • p → 粘贴剪贴板
  • hjkl (强例推荐使用其移动光标,但不必需) →你也可以使用光标键 (←↓↑→). 注: j 就像下箭头。
  • :help <command> → 显示相关命令的帮助。你也可以就输入 :help 而不跟命令。(陈皓注:退出帮助需要输入:q)

 

有几张不同角度的cheat sheet,参考链接https://blog.csdn.net/weixin_35477207/article/details/78165411


 

 

 

 

vim学习连接:

https://vimjc.com/

https://coolshell.cn/articles/5426.html

https://vim-adventures.com/

https://blog.csdn.net/lsacaner/article/details/92800900

3.插件安装

对于Windows上做C++开发的用户来说,vs为他们做了大量的工作,语法高亮、自动缩进、智能提示等等,当你happy的使用vs时,请记住一点,这是一个收费软件,虽然在我大中华普遍都在使用微软的盗版软件,但作为程序员我们心里应该知道这是不对的行为,然后再去——等等,我们今天讨论的不是这个话题,我们要说的是Linux下的免费软件Vim!

我将本文需要安装的插件和配置文件都放在了github上,如果你不想大费周折的了解每个插件的安装方式,可以直接下载所有插件即可使用,项目地址https://github.com/handy1989/vim,可以按照如下命令备份并一次安装所有插件(注意,从git上下载的vim目录下都是隐藏文件,ls -a可以查看)

  1.  
    git clone https://github.com/handy1989/vim.git
  2.  
    mv vim/.vimrc ~/
  3.  
    mv vim/.vim ~/
  4.  
    sudo apt-get install ctags

原文链接:https://www.linuxidc.com/Linux/2016-06/132262.htm

代码编译

GCC(GNU Compiler Collection)是一组编译工具的总称,支持多平台、多语言源文件到可执行文件的编译与生成。其中也包括gcc(C编译器)和g++(C++编译器)。

编译单个文件为可执行文件:

g++ -Wall -W hello.cpp -o hello

编译多个文件为可执行文件:

g++ -Wall -W main.cpp hello_fun.cpp -o newhello

预处理

可以用gcc选项定义宏,-DNAME会定义一个名为NAME的宏。如g++ -Wall -DTEST dtest.cpp,定义了名为TEST的宏。定义的宏会对代码产生影响。
也可以为宏定义值,-DNAME=VALUE。如g++ -Wall -DNUM=100 dtestval.cpp,g++ -Wall -DNUM="2+2" dtestval.cpp,g++ -Wall -DMESSAGE="\"Hello,World!\"" dteststr.cpp。在代码中把宏用括号括起来是好习惯。

makefile文件

对于较大的工程,如果还像前文一样写命令行就太痛苦了。而使用makefile可以管理整个工程的编译规则,之后用一个make命令就可自动编译,相对方便很多。

makefile文件名应为Makefile或makefile

使用CMake自动生成makefile

当处理较大型的项目时,手动书写makefile就比较痛苦,这时用来用来自动化自动化工具makefile的自动化工具就是CMake。不过天下哪有那么便宜的事,它也是要写自己的CMakeLists.txt的。
推荐书籍《CMake实践》《Mastering CMake》和官网帮助。

简介

CMake是一个跨平台的自动化建构系统,它是用一个名为CMakeLists.txt的文件来描述构建过程,可以产生标准的构建文件,如Unix的makefile或Windows Visual Studio的projects/workspaces。
文件CMakeLists.txt需要手工编写,也可以通过编写脚本进行半自动的生成。

在Linux平台下使用CMake生成makefile并编译的流程如下:

  1. 安装CMake。在Ubuntu上安装cmake很简单$sudo apt-get install cmake。如果想要其Qt图形界面另需安装sudo apt-get install cmake-qt-gui。一般不需要,在Ubuntu系统上用ccmake就可以了。
  2. 编写CMakeLists.txt。
  3. 运行CMake。用cd将当前目录设为生成目标目录,执行命令ccmake srcdir(文字界面)或cmake -i(交互命令行),如果想使用Qt图形界面使用cmake-gui。
  4. Makefile已经生成。使用make命令进行编译。
  5. 如果想清理工程。使用make clean。

cmke学习参考:https://www.cnblogs.com/wainiwann/p/6497791.html

代码调试

gdb

gdb是一个用来调试C和C++程序的功能强大的调试器,能在程序运行时观察程序的内部结构和内存使用情况。
gdb主要提供以下功能:

  • 监视程序中变量的值的变化。
  • 设置断点,使程序在指定的代码行上暂停执行,便于观察。
  • 单步执行代码。
  • 分析崩溃程序产生的core文件。

为使gdb能正常工作,必须在程序编译时包含调试信息。即-g选项。

简单的调试步骤示例

  1. 载入test可执行文件gdb test
  2. 运行run。
  3. 查看程序出错的地方where。
  4. 查看出错函数附近的代码list。
  5. 打开堆栈backtrace。
  6. 单步调节next或step。
  7. 查看可疑表达式值print var。
  8. 在可疑行打断点break 8。
  9. 重新运行会在断点处停止。用set variable修改变量值。
  10. 继续运行continue。看结果是否正确。
  11. 退出gdbquit。

 

CMakeList.txt 文件修改

修改CMakeList.txt 加入

  1.  
    SET(CMAKE_BUILD_TYPE "Debug") 
  2.  
    SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
  3.  
    SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

        原因是CMake 中有一个变量 CMAKE_BUILD_TYPE ,可以的取值是 Debug Release RelWithDebInfo >和 MinSizeRel。
当这个变量值为 Debug 的时候,CMake 会使用变量 CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_C_FLAGS_DEBUG 中的字符串作为编译选项生成 Makefile;
重新编译

cmake -DCMAKE_BUILD_TYPE=Debug Path

参考链接:https://blog.csdn.net/gdp12315_gu/article/details/45063479

程序参数输入

gdb调试时,程序路径后跟的参数为gdb的参数,程序的参数需在运行时输入:

  1.  
    gdb test
  2.  
    run par1 par2

gdb学习链接:

https://www.cnblogs.com/life2refuel/p/5396538.html

http://blog.sina.com.cn/s/blog_a573f7990101k58w.html

 

参考文献:

https://www.cnblogs.com/BlueMountain-HaggenDazs/p/6426465.html

https://blog.csdn.net/weixin_35477207/article/details/78165411

posted @ 2020-11-18 13:47  Bigben  阅读(3924)  评论(0)    收藏  举报