Gcc與Make編譯C C 學習

2021-07-04 17:37:48 字數 2147 閱讀 7114

在linux環境下 編譯c/c++檔案需要使用gcc或者make的編譯軟體進行編譯

編譯有三個過程:預編譯---->編譯----->鏈結    預編譯的過程就是將c/c++檔案的標頭檔案包含到**的過程  編譯就是將檔案變成機器**  鏈結就是將**中使用的各個函式庫的機器**進行鏈結變成可執行檔案

1:首先學習預編譯 gcc -o out.c -e src.c

這是hello.c的原始檔內容

如:gcc -o shao.c -e hello.c

可以看一下預編譯後生成的檔案內容

內容就是將stdio.h 和 stdlib.h檔案拷貝到shao.c中

預編譯結束後就要進行編譯檔案:gcc -o out.o -c src.c

如gcc -o hello.o -c hello.c  就會生成hello.c的機器** 真是順序是:生成組合語言 然後生成機器** 這裡就省略生成組合語言的過程

機器**生成後通過鏈結命令生成可執行檔案 gcc -o out src.o....

如gcc -o hello hello.o

執行編譯完成後的可執行檔案./hello

到這裡 乙個c檔案就被我們用gcc成功編譯成功啦~~到這只是體驗了預編譯和編譯的過程,那麼為很麼需要鏈結的過程才能生成可執行檔案,鏈結就是將源**中用到其他庫函式的**鏈結到編譯生成的機器**:

如更改hello.c**,使用到另乙個add.c中的add(int a,int b)的方法,如果不把add.c編譯成add.o檔案,直接使用gcc -o hello hello.c生成的可執行檔案會報錯,因為add()方法的機器**沒有鏈結進來,所以第三部需要gcc -o hello hello.o add.o鏈結完成後生成的hello可執行檔案才能執行:

如圖:

使用的add()方法是add.c中的**,需要執行gcc -o hello.o -c hello.c 和 gcc -o add.o -c  add.c 生成add.o 和 hello.o的機器**

然後使用第三個步驟gcc -o hello add.o hello.o 進行鏈結生成可執行檔案hello才能執行

如果不進行add.o直接編譯gcc -o hello hello.o 的話可執行檔案不能執行

在真實專案中不使用gcc進行編譯 檔案太多不夠方便,可以把make理解為批處理編譯,我要將專案中的.c檔案與.o檔案關聯然後生成可執行檔案,完整的makefile檔案內容如下:

執行make命令會自動執行當前目錄下的makefile檔案:效果如圖

這樣編譯專案的話會很快。如果對makefile檔案內容不太理解的話,由於時間問題還是去看看makefile編譯的語法規範

ok  just like ! just do it!

GCC 同時編譯多個 C C 檔案

以下這些操作都可以共用一條gcc指令 目錄結構如下 wohu ubuntu cpp src tree function.cpp function.h main.cpp 0 directories,3 files wohu ubuntu cpp src function.cpp內容 include v...

gcc下c c 程式編譯 執行命令

一 基本命令 c編譯 執行 gcc wall g o desktop test desktop test.c desktop test c 編譯 執行 g desktop c test.cpp o desktop c test.exe desktop c test.exe 注意具體目錄 二 新增警告...

GCC編譯器學習

不同的平台如x86和arm,一段程式跑起來到最下面會轉成彙編,彙編要轉成機器碼,機器碼會由於硬體平台不同而不同。有時候要程式設計序在arm上跑,必須針對arm寫程式,但是在arm上寫程式很麻煩 沒有很好的開發工具 所以我們就在x86平台上 windows 上把程式寫好,但是編譯的時候告訴它我們要執行...