国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

CMake : Linux 搭建開發(fā) - g++、gdb

這篇具有很好參考價值的文章主要介紹了CMake : Linux 搭建開發(fā) - g++、gdb。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1、環(huán)境搭建

1.1 編譯器 GCC,調(diào)試器 GDB

1.2 CMake

2、G++ 編譯

2.1 編譯過程

編譯預(yù)處理 *.i

編譯 *.s

匯編 *.o

鏈接 bin

2.2 G++ 參數(shù)

-g

-O[n]

-l、-L

-I

-Wall、-w

-o

-D

-fpic

3、GDB 調(diào)試器

3.1 調(diào)試命令參數(shù)

4、CMake

4.1 含義

4.2 構(gòu)建樹

4.3 常用命令

4.4 構(gòu)建流程


1、環(huán)境搭建

1.1 編譯器 GCC,調(diào)試器 GDB

sudo apt update # 需要更新
sudo apt install build-essential gdb

# 確定版本號
gcc --version
g++ --version
gdb --version

1.2 CMake

sudo apt install cmake

cmake --version

2、G++ 編譯

2.1 編譯過程

編譯預(yù)處理 *.i

  1. 主要對包含的**頭文件(#include)和宏定義(#define, #ifdef ...)還有注釋**等進行處理;

  2. 預(yù)處理之后停止編譯過程,生成 *.ii.c 生成的是 .i)文件;

  3. #include 引入的內(nèi)容被全部復(fù)制到預(yù)編譯文件中,宏定義也會被相應(yīng)替換處理。

    # -E 僅對源文件進行預(yù)處理
    g++  -E test.cpp  -o test.i
    • 最主要的工作:宏命令的替換;
    • #include 單純導(dǎo)入,可以導(dǎo)入 cpp、txt 文件等等;

編譯 *.s

  1. 語法錯誤檢查,檢查無誤再翻譯成匯編語言;

  2. 生成的是和 CPU 架構(gòu)相關(guān)的匯編指令,不同 CPU 架構(gòu)采用的匯編指令集不同,生成的匯編代碼也不一樣。

    # -S 產(chǎn)生匯編語言文件后停止編譯
    g++  -S test.i  -o test.s

匯編 *.o

  1. g++ 生成:g++ -c test.s -o test.o

  2. 匯編器匯編生成:as test.s -o test.o

  3. 將匯編代碼生成機器可執(zhí)行的二進制目標(biāo)代碼

    # -c 僅把源代碼編譯為機器語言的目標(biāo)代碼
    g++  -c test.s  -o test.o

鏈接 bin

  1. 核心工作:解決模塊間各種符號(變量、函數(shù))相互引用的問題,除了使用 test.o 還會將靜態(tài)(動態(tài))庫鏈接一同生成可執(zhí)行文件;

  2. 符號重定位:引用符號(對符號在內(nèi)存中具體地址的引用),解決當(dāng)前編譯單元如何訪問外部符號的問題。

    # -o 產(chǎn)生指定文件名的可執(zhí)行文件
    g++ test.o -o test
    # g++ test.o test.so test.a

    添加 **g++ --save-temps **參數(shù),保存編譯過程中生成的所有中間文件。

2.2 G++ 參數(shù)

-g

  • 編譯帶調(diào)試信息的可執(zhí)行文件;

  • 產(chǎn)生能被 GNU 調(diào)試器GDB使用的調(diào)試信息,以調(diào)試程序。

-O[n]

  • 優(yōu)化,例如省略從未使用過的變量、直接將常量表達式用結(jié)果值代替等等;

  • -O 對源代碼進行基本優(yōu)化,如-O2,-O3,-On(n 常為0–3) :

    • -O 減小代碼的長度和執(zhí)行時間,等價 -O1;

    • -O0 不做優(yōu)化;

    • -O1 默認優(yōu)化;

    • -O2 完成-O1優(yōu)化之外,還進行一些額外的調(diào)整工作,如指令調(diào)整等;

    • -O3 包括循環(huán)展開和其他一些與處理特性相關(guān)的優(yōu)化工作。

-l、-L

  • -l : 指定庫文件,如 -lglog ;

  • -L : 指定庫文件路徑,如 -L/home/lib 。

-I

  • 指定頭文件搜索路徑。

-Wall、-w

  • -Wall打印警告信息;

  • -w關(guān)閉警告信息。

-o

  • 指定輸出文件名,如 -o test 。

-D

  • 定義預(yù)處理宏:-DDEBUG 開啟或關(guān)閉 DEBUG。

-fpic

  • position-independent code,是否創(chuàng)建與位置無關(guān)的目標(biāo)(可行性文件或共享庫);

  • PIC廣泛使用于共享庫,使得同一個庫中的代碼能夠被加載到不同進程的地址空間中。PIC 還用于缺少內(nèi)存管理單元的計算機系統(tǒng)中,使得操作系統(tǒng)能夠在單一的地址空間中將不同的運行程序隔離開來;

  • 地址無關(guān)代碼能夠在不做修改的情況下被復(fù)制到內(nèi)存中的任意位置。這一點不同于重定位代碼,因為重定位代碼需要經(jīng)過鏈接器或加載器的特殊處理才能確定合適的運行時內(nèi)存地址;

  • cmake: set(CMAKE_POSITION_INDEPENDENT_CODEON)。

3、GDB 調(diào)試器

3.1 調(diào)試命令參數(shù)

$(gdb)help(h) # 查看命令幫助,具體命令查詢在gdb中輸入help + 命令

$(gdb)run(r) # 重新開始運行文件(run-text:加載文本文件,run-bin:加載二進制文件)
$(gdb)start # 單步執(zhí)行,運行程序,停在第一行執(zhí)行語句
$(gdb)next(n)   # 單步調(diào)試(逐過程,函數(shù)直接執(zhí)行)
$(gdb)step(s) # 單步調(diào)試(逐語句:跳入自定義函數(shù)內(nèi)部執(zhí)行)
$(gdb)continue(c) # 繼續(xù)運行
$(gdb)finish # 結(jié)束當(dāng)前函數(shù),返回到函數(shù)調(diào)用點
$(gdb)quit(q) # 退出gdb

$(gdb)list(l) # 查看原代碼(list-n,從第n行開始查看代碼。list+ 函數(shù)名:查看具體函數(shù))
$(gdb)backtrace(bt) # 查看函數(shù)的調(diào)用的棧幀和層級關(guān)系
$(gdb)info(i) # 查看函數(shù)內(nèi)部局部變量的數(shù)值
$(gdb)set # 設(shè)置變量的值
$(gdb)display # 追蹤查看具體變量值
$(gdb)print(p) # 打印值及地址

$(gdb)undisplay # 取消追蹤觀察變量
$(gdb)watch # 被設(shè)置觀察點的變量發(fā)生修改時,打印顯示
$(gdb)i watch # 顯示觀察點

$(gdb)info breakpoints # 查看當(dāng)前設(shè)置的所有斷點
$(gdb)enable breakpoints # 啟用斷點
$(gdb)disable breakpoints # 禁用斷點
$(gdb)break+num(b) # 在第num行設(shè)置斷點
$(gdb)delete breakpoints num(d) # 刪除第num個斷點

$(gdb)x # 查看內(nèi)存x/20xw 顯示20個單元,16進制,4字節(jié)每單元
$(gdb)run argv[1] argv[2] # 調(diào)試時命令行傳參
$(gdb)frame(f) # 切換函數(shù)的棧幀
$(gdb)set follow-fork-mode child # Makefile項目管理:選擇跟蹤父子進程(fork())

4、CMake

CMake 始于 1999 年,當(dāng)時開發(fā)公司 Kitware 被委托設(shè)計一套工具來簡化研究人員的日常工作軟件。目標(biāo)很明確:提供一組工具,可以在不同平臺上配置、構(gòu)建、測試和部署項目。

4.1 含義

CMake 本身是一個工具集,由五個可執(zhí)行的程序組成:cmake、ctest、cpack、cmake-gui、ccmake。

  • cmake:用于在構(gòu)建項目的第一步,進行項目的配置、生成和構(gòu)建項目的主要可執(zhí)行文件的工作;

  • ctest:定義測試、測試套件,并設(shè)置應(yīng)該如何執(zhí)行,用于運行和報告測試結(jié)果的測試驅(qū)動程序;

  • cpack:為打包需求提供了 DSL,用來生成安裝程序和源包的打包程序

  • cmake-gui:cmake 的圖形界面;

  • ccmake:用于圖形界面,與 cmake-gui 不同的地方在于ccmake是基于控制臺(terminal)的圖形界面。

CMake : Linux 搭建開發(fā) - g++、gdb

CDash 將項目的測試結(jié)果在面板中展示。

  • CMake time,CMake 運行階段,將處理項目中的 CMakeLists.txt 文件并進行配置;

  • Generation time,配置成功后,CMake 將生成本地構(gòu)建工具所需的腳本,以執(zhí)行項目中的后續(xù)步驟;

  • Build time,調(diào)用編譯器,并在特定的構(gòu)建目錄中構(gòu)建目標(biāo)。遞歸的 CMake time 用來實現(xiàn)平臺無關(guān)的構(gòu)建;

  • CTest time,運行項目的測試套件,以檢查目標(biāo)是否按預(yù)期執(zhí)行。

  • CDash timereport time,將測試結(jié)果上傳到面板;

  • Install time,將項目的目標(biāo)、源文件、可執(zhí)行文件和庫從構(gòu)建目錄安裝到安裝位置。

  • CPack timepackaging time,項目打包;

  • Package install time,在系統(tǒng)范圍內(nèi)安裝新生成的包。

4.2 構(gòu)建樹

構(gòu)建的每一個目標(biāo),都是樹形的結(jié)構(gòu)。

CMake : Linux 搭建開發(fā) - g++、gdb

4.3 常用命令

  • cmake_minimum_required - 指定CMake的最小版本要求

語法: cmake_minimum_required(VERSION versionNumber [FATAL_ERROR]

  • project - 定義工程名稱,并可指定工程支持的語言

語法: project(projectname [CXX] [C] [Java])

  • set - 顯式的定義變量

語法:set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])

set(SRC sayhello.cpp hello.cpp)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
set( CMAKE_BUILD_TYPE Debug )
  • include_directories - 向工程添加多個特定的頭文件搜索路徑

語法: include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)

include_directories(/usr/include/myincludefolder ./include)
  • link_directories - 向工程添加多個特定的庫文件搜索路徑

語法: link_directories(dir1 dir2 ...)

link_directories(/usr/lib/mylibfolder ./lib)
  • add_library - 生成庫文件

語法: add_library(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)

add_library(hello SHARED ${SRC})
  • add_compile_options - 添加編譯參數(shù)

語法:add_compile_options

add_compile_options(-Wall -std=c++11 -O2)
  • add_executable - 生成可執(zhí)行文件

語法:add_executable(exename source1 source2 ... sourceN)

  • target_link_libraries - 為 target 添加需要鏈接的共享庫

語法: target_link_libraries(target library1<debug | optimized> library2...)

  • add_subdirectory - 向當(dāng)前工程添加存放源文件的子目錄,并可以指定中間二進制和目標(biāo)二進制存放的位置

語法: add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

  • aux_source_directory - 發(fā)現(xiàn)目錄下所有源文件并將列表存儲在一個變量中,被用來自動構(gòu)建源文件列表

語法: aux_source_directory(dir VARIABLE)

  • target_include_directories( swap_lib PUBLIC ${PROJECT_SOURCE_DIR}/include ) - 鏈接靜態(tài)庫目錄

    4.4 構(gòu)建流程

  1. 建立 build 文件夾,并進入 build 目錄:mkdir build & cd build

  2. 編譯上級目錄的 CMakeLists.txt 文件,生成 Makefile 和 其他文件:cmake ..

  3. 執(zhí)行 make 命令,生成目標(biāo):make

  4. 流程圖如下,包括三個基本階段:配置、生成、構(gòu)建階段

CMake : Linux 搭建開發(fā) - g++、gdb文章來源地址http://www.zghlxwxcb.cn/news/detail-425219.html

到了這里,關(guān)于CMake : Linux 搭建開發(fā) - g++、gdb的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【LINUX】查看自己系統(tǒng)環(huán)境、編譯器環(huán)境

    【LINUX】查看自己系統(tǒng)環(huán)境、編譯器環(huán)境

    1.查看自己系統(tǒng)環(huán)境 ????????在Linux系統(tǒng)上,使用 uname -a 命令可以獲取關(guān)于系統(tǒng)內(nèi)核和操作系統(tǒng)的詳細信息。這個命令會顯示出當(dāng)前系統(tǒng)的內(nèi)核版本、主機名、操作系統(tǒng)類型、處理器架構(gòu)等信息。在終端中執(zhí)行以下命令即可查看輸出: 輸出可能會類似于以下內(nèi)容: ?當(dāng)在

    2024年02月07日
    瀏覽(20)
  • 04-vscode搭建cmake的編譯環(huán)境

    04-vscode搭建cmake的編譯環(huán)境

    vscode+mingw搭建C/C++環(huán)境系列 01.vscode+mingw搭建編譯調(diào)試環(huán)境 02-vscode編譯調(diào)試單個源文件程序 03-vscode編譯調(diào)試多個源文件程序 04-vscode搭建cmake的編譯環(huán)境 前面的文章中提到過通過修改settings.json文件和tasks.json文件可以完成多個源文件程序編譯運行,但是如果源文件較多,每次都

    2024年01月17日
    瀏覽(19)
  • CMake rv1109交叉編譯環(huán)境搭建

    準(zhǔn)備安裝包VMware-workstation-full-15.5.1-15018445.exe 下載地址 安裝 參考資料 準(zhǔn)備安裝包ubuntu-18.04.4-desktop-amd64.iso 下載地址 安裝 參考資料 準(zhǔn)備安裝包rv1109_toolchain_release.tar.bz2 下載地址 解壓安裝包rv1109_toolchain_release.tar.bz2 運行安裝包腳本安裝 配置環(huán)境變量~/.bashrc 安裝結(jié)果檢查 如下

    2024年02月10日
    瀏覽(47)
  • CMake I 獲取/設(shè)置編譯器

    CMake I 獲取/設(shè)置編譯器

    目錄 一、獲取編譯器信息 1.與編譯器交互 (1)CMake變量 (2)CMakeLists.txt 二、設(shè)置編譯器 ????????Microsoft Windows上,如果cmake生成器是Visual Studio,將選擇Visual Studio中 的 C++ 和 C 編譯器。 CMake提供 --system-information 標(biāo)志,它將把關(guān)于系統(tǒng)的所有信息轉(zhuǎn)儲到屏幕或文件中: i

    2024年02月03日
    瀏覽(21)
  • 【BSP技能手冊】-【MCU篇】-【stm32】-【開發(fā)環(huán)境】-【編譯器】

    【BSP技能手冊】-【MCU篇】-【stm32】-【開發(fā)環(huán)境】-【編譯器】

    開發(fā)環(huán)境==為支持系統(tǒng)軟件和應(yīng)用軟件的工程化開發(fā)和維護而使用的一組軟件,分為【編譯器】【驅(qū)動程序】【下載程序】【調(diào)試程序】。stm32常用kei進行開發(fā)。 此文介紹kei【編譯器】的安裝。 (權(quán)限問題,注意辨認縮寫) ①bai度云鏈接:https://pan.baidu.com/s/17YrqCeGSIG15WVwIzx4

    2024年02月07日
    瀏覽(24)
  • 【VSCode】Windows環(huán)境下,VSCode 搭建 cmake 編譯環(huán)境(通過配置文件配置)

    【VSCode】Windows環(huán)境下,VSCode 搭建 cmake 編譯環(huán)境(通過配置文件配置)

    除了之前的使用 VSCode 插件來編譯工程外,我們也可以使用配置文件來編譯cmake工程,主要依賴 launch.json 和 tasks.json 文件。 目錄 一、下載編譯器 1、下載 Windows GCC 2、選擇編譯器路徑 二、配置 debug 環(huán)境 1、配置 lauch.json 文件 2、配置 tasks.json 文件 三、編譯工程 1、測試工程結(jié)

    2024年02月03日
    瀏覽(23)
  • VSCode + GCC編譯器(MinGW)開發(fā)環(huán)境中文字符亂碼問題踩坑與解決辦法

    VSCode + GCC編譯器(MinGW)開發(fā)環(huán)境中文字符亂碼問題踩坑與解決辦法

    問題背景 在較長一段時間里,C/C++開發(fā)者所使用的集成開發(fā)環(huán)境(IDE)要么是比較重量級的 VS(Visual Studio) ,要么是 Codeblocks·、·Visual C++ 6.0 等輕量級IDE,又或者是諸如 notepad++、sublime text 等文本編輯器+ GCC編譯器 +命令行工具的組合式開發(fā)環(huán)境。這幾種開發(fā)方式要么太過龐

    2023年04月22日
    瀏覽(35)
  • Linux驅(qū)動開發(fā)筆記(二):ubuntu系統(tǒng)從源碼編譯安裝gcc7.3.0編譯器

    Linux驅(qū)動開發(fā)筆記(二):ubuntu系統(tǒng)從源碼編譯安裝gcc7.3.0編譯器

    若該文為原創(chuàng)文章,轉(zhuǎn)載請注明原文出處 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130533941 紅胖子網(wǎng)絡(luò)科技博文大全:開發(fā)技術(shù)集合(包含Qt實用技術(shù)、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機、軟硬結(jié)合等等)持續(xù)更新中… 上一篇:《Linux驅(qū)動開發(fā)筆記(一

    2024年02月06日
    瀏覽(27)
  • ARM_Linux的交叉開發(fā)以及交叉編譯器

    ARM_Linux的交叉開發(fā)以及交叉編譯器

    目錄 為什么要使用交叉開發(fā) 為什么要使用交叉編譯 交叉編譯器的安裝 交叉編譯器的使用 交叉開發(fā)是指在通用的電腦上吧程序編寫,編譯,調(diào)試好,再下載到嵌入式產(chǎn)品中去運行,對于一些簡單的程序的話,直接在電腦上編譯調(diào)試好即可,但是對于一些需要操作硬件的開發(fā)

    2024年01月23日
    瀏覽(26)
  • 從入門到精通:解鎖Linux開發(fā)工具和編譯器的力量

    從入門到精通:解鎖Linux開發(fā)工具和編譯器的力量

    vim是一個方便編程的功能特別豐富的文本編輯器,憑借他簡潔的三種模式以及豐富的快捷鍵操作,可使得熟練使用的人做到不使用鼠標(biāo)完成代碼的編寫,所以深受人們喜愛。 vim是一個 多模式 的編輯器——命令行模式、插入模式、底行模式。三種模式的轉(zhuǎn)換及關(guān)系如下: 下面

    2024年02月11日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包