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

Ubuntu c/c++ 开发环境_第1张图片

2.插入模式 

插入模式可以编辑文本

Esc 键进入普通模式

3.命令模式

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

普通模式常用下指令

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

 

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


Ubuntu c/c++ 开发环境_第2张图片

Ubuntu c/c++ 开发环境_第3张图片 

Ubuntu c/c++ 开发环境_第4张图片 

Ubuntu c/c++ 开发环境_第5张图片 

 

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可以查看)

git clone https://github.com/handy1989/vim.git
mv vim/.vimrc ~/
mv vim/.vim ~/
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.cppg++ -Wall -DNUM="2+2" dtestval.cppg++ -Wall -DMESSAGE="\"Hello,World!\"" dteststr.cpp。在代码中把宏用括号括起来是好习惯。

makefile文件

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

makefile文件名应为Makefilemakefile

使用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. 单步调节nextstep
  7. 查看可疑表达式值print var
  8. 在可疑行打断点break 8
  9. 重新运行会在断点处停止。用set variable修改变量值。
  10. 继续运行continue。看结果是否正确。
  11. 退出gdbquit

Ubuntu c/c++ 开发环境_第6张图片

 

CMakeList.txt 文件修改

修改CMakeList.txt 加入

SET(CMAKE_BUILD_TYPE "Debug") 
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
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的参数,程序的参数需在运行时输入:

gdb test
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

 

 

你可能感兴趣的:(linux使用,c++,linux)