【B站视频教程笔记】基于VSCode和CMake实现C/C++开发 | Linux篇(gcc/g++)(安装、配置、使用详细教程)(VSCode教程)(CMake教程)(精!)
基于VSCode和CMake實現C/C++開發 | Linux篇
文章目錄
- 目錄結構
- 文件編輯
- vim(編輯器之神,linux里可以暢通無阻,必學,但不是現在!)
- 安裝GCC和GDB
- g++編譯過程
- 動手操作
- g++編譯參數
- 編譯帶調試信息的可執行文件 -g
- 優化源代碼 -O[n]
- 案例:優化等級
- -l (小寫L)指定庫文件和 -L 指定庫文件路徑
- -I (大寫i)指定頭文件搜索目錄
- 打印警告信息 -Wall 和關閉警告信息 -w
- 設置編譯標準 -std=c++xx
- 指定輸出文件名 -o
- -D定義宏(選擇開啟宏或關閉宏)
- 使用 man gcc 或 man g++ 查看手冊
- 實戰:g++命令行編譯
- 編譯生成可執行文件
- 編譯生成靜態庫(擴展名.a),并鏈接生成可執行文件
- 編譯生成動態庫(擴展名.so),并鏈接生成可執行文件
- GDB調試器(GNU Debugger)
- 【實戰】命令行調試
- 相應快捷指令
- VSCode在linux16.04下的安裝及使用(以及插件,比如CMake)
- 安裝
- 使用,自己看視頻吧
- 插件安裝
- 高頻使用快捷鍵或操作
- Cmake使用
目錄結構
Bin:全稱binary,含義是二進制。該目錄中存儲的都是一些二進制文件,文件都是可以被運行的。
Dev:該目錄中主要存放的是外接設備,例如盤、其他的光盤等。在其中的外接設備是不能直接被使用的,需要掛載(類似window下的分配盤符)。
Etc:該目錄主要存儲一些配置文件。
Home:表示“家”,表示除了root用戶以外其他用戶的家目錄,類似于windows下的User/用戶目錄。
Proc:全稱process,表示進程,該目錄中存儲的是Linux運行時候的進程。
Root:該目錄是root用戶自己的家目錄。
Sbin:全稱super binary,該目錄也是存儲一些可以被執行的二進制文件,但是必須得有super權限的用戶才能執行。
Tmp:表示“臨時”的,當系統運行時候產生的臨時文件會在這個目錄存著。
Usr:存放的是用戶自己安裝的軟件。類似于windows下的program files。(應該說錯啦!!這是unix系統資源目錄)
Var:存放的程序/系統的日志文件的目錄。
Mnt:當外接設備需要掛載的時候,就需要掛載到mnt目錄下。
樹工具
sudo apt install tree文件編輯
vim(編輯器之神,linux里可以暢通無阻,必學,但不是現在!)
還介紹了gedit、nano編輯器,,雞肋
安裝GCC和GDB
每次安裝新的程序之前都要運行下這個:
sudo apt-get update安裝gdb
sudo apt install build-essential gdb查看版本
gcc --version g++ --version gdb --version安裝CMake
– sudo apt-get update –
sudo apt-get install cmake查看cmake版本
cmake --versiong++編譯過程
動手操作
安裝vim
新建testcpp文件夾
新建test.cpp文件
vim里設置制表符空格為4個(默認為8個)
鍵入如下代碼:
#include <iostream> using namespace std;int main() {cout << "This is easy!" << endl;return 0; }g++編譯
g++ test.cpp -o test生成了可執行文件并運行,結果:
yg@ubuntu:~/arnold_test/testcpp$ ls test test.cpp yg@ubuntu:~/arnold_test/testcpp$ ./test This is easy! yg@ubuntu:~/arnold_test/testcpp$根據上面預處理、編譯、匯編、鏈接那幾個步驟,生成四個文件:
yg@ubuntu:~/arnold_test/testcpp$ ls test test.cpp test.i test.o test.s yg@ubuntu:~/arnold_test/testcpp$g++編譯參數
編譯帶調試信息的可執行文件 -g
優化源代碼 -O[n]
案例:優化等級
vim創建test_opt.cpp
#include <iostream> using namespace std;int main(){unsigned long int counter;unsigned long int result;unsigned long int temp;unsigned int five;int i;for (counter = 0; counter < 2009*2009*100/4 + 2010; counter +=(10 - 6)/4){temp = counter/1979;for(i = 0; i < 20; i++)//每一次for循環都會進行復雜的計算five = 200 * 200 / 8000;result = counter;}cout << "result = " << result << endl;return 0; }生成不同等級的優化代碼:
g++ test_opt.cpp -o test_opt_o g++ test_opt.cpp -O2 -o test_opt_o2 g++ test_opt.cpp -O3 -o test_opt_o3…
用time命令測試生成的每個可執行文件的的運行時間
-l (小寫L)指定庫文件和 -L 指定庫文件路徑
-I (大寫i)指定頭文件搜索目錄
打印警告信息 -Wall 和關閉警告信息 -w
設置編譯標準 -std=c++xx
指定輸出文件名 -o
-D定義宏(選擇開啟宏或關閉宏)
使用 man gcc 或 man g++ 查看手冊
man gcc實戰:g++命令行編譯
編譯生成可執行文件
建立如下目錄:
yg@ubuntu:~/arnold_test/GCC_demo_swap$ tree . ├── include │ └── swap.h ├── main.cpp └── src└── swap.cpp- main.cpp
- swap.cpp(里面不用包含swap.h也行吧?作者寫多了?沒寫多,就是要這樣寫,詳情見我另一篇博文)
- swap.h
執行編譯:(由于swap.h與main.cpp不在同一目錄,要用-I參數指定其路徑)
g++ main.cpp ./src/swap.cpp -Iinclude結果:
yg@ubuntu:~/arnold_test/GCC_demo_swap$ ls a.out include main.cpp src yg@ubuntu:~/arnold_test/GCC_demo_swap$ ./a.out 交換前:a = 1, b = 2 交換后:a = 2, b = 1 success! yg@ubuntu:~/arnold_test/GCC_demo_swap$當然編譯也能增加其他一些需要的參數:
g++ -O2 main.cpp ./src/swap.cpp -Iinclude -Wall -o main結果:
yg@ubuntu:~/arnold_test/GCC_demo_swap$ g++ -O2 main.cpp ./src/swap.cpp -Iinclude -Wall -o main yg@ubuntu:~/arnold_test/GCC_demo_swap$ ls a.out include main main.cpp src yg@ubuntu:~/arnold_test/GCC_demo_swap$ ./main 交換前:a = 1, b = 2 交換后:a = 2, b = 1 success!編譯生成靜態庫(擴展名.a),并鏈接生成可執行文件
用的還是之前的代碼
yg@ubuntu:~/arnold_test/GCC_demo_swap$ tree . ├── include │?? └── swap.h ├── main.cpp └── src└── swap.cppar歸檔?
我沒在swap.cpp加include "swap.h"這句代碼,編譯時也沒加-I../include,也能成功生成
staticmain能直接運行
編譯生成動態庫(擴展名.so),并鏈接生成可執行文件
刪除上面生成的swap.o和libswap.a
sharemain不能直接運行,要在運行時加載(調用)動態庫libswap.so才行
你可以設置它運行時去找動態庫的目錄,
# 運行可執行文件(等號左右不能有空格!!!!) LD_LIBRARY_PATH=src ./sharemain當然你也可以直接把libswap.so拷貝到sharemain的目錄下(不行哎!linux下同目錄也搜索不到!)
GDB調試器(GNU Debugger)
【實戰】命令行調試
調試代碼:sum.cpp
#include <iostream> using namespace std;int main(int argc, char **argv) {int N = 100;int sum = 0;int i = 1; // calculate sum from 1 to 100while(i <= N){sum = sum + i;i = i + 1;}cout << "sum = " << sum << endl;cout << "The program is over." << endl;return 0; }編譯生成兩個文件,一個帶調試功能,一個不帶調試功能
g++ sum.cpp -o sum_no_gdb g++ -g sum.cpp -o sum_yes_gdb yg@ubuntu:~/arnold_test/gdb_test$ ls -lh 總用量 36K -rw-rw-r-- 1 yg yg 289 Sep 8 02:32 sum.cpp -rwxrwxr-x 1 yg yg 9.1K Sep 8 04:39 sum_no_gdb -rwxrwxr-x 1 yg yg 20K Sep 8 04:39 sum_yes_gdb yg@ubuntu:~/arnold_test/gdb_test$可以看到,sum_yes_gdb要大一些
執行:
gdb sum_yes_gdb開始調試
gdb sum_yes_gdb進入調試器:ctrl + x,a
相應快捷指令
打斷點:b + 行數
查看斷點信息:i
運行程序:r
下一句代碼(不進入代碼):n
下一句代碼(進入代碼):s
打印變量:p + 變量名
跳到下一個斷點:c
監視變量值:display + 變量名
執行上次執行的命令:回車鍵(Enter)
顯示斷點附近代碼(調試器模式時無效):list
退出調試:q
VSCode在linux16.04下的安裝及使用(以及插件,比如CMake)
安裝
Linux下VSCode的安裝和使用(VScode C/C++配置 CMake的使用)(GCC、GDB)(各類插件 Snippets、Code Runner、Include Autocomplete)
使用,自己看視頻吧
https://www.bilibili.com/video/BV1fy4y1b7TC?p=12
插件安裝
C/C++插件
CMake
CMake Tools
安裝(可選):C/C++ Snippets、Code Runner、Include Autocomplete
作者安裝插件參考:
高頻使用快捷鍵或操作
Cmake使用
見:Cmake教程
總結
以上是生活随笔為你收集整理的【B站视频教程笔记】基于VSCode和CMake实现C/C++开发 | Linux篇(gcc/g++)(安装、配置、使用详细教程)(VSCode教程)(CMake教程)(精!)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMWare ubuntu虚拟机每次开机
- 下一篇: ubuntu apt-get指令和apt