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.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

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM