天天看點

面試官問Linux下如何編譯C程式,如何回答?為你編譯示範

文章來源:嵌入式大雜燴

作者:ZhengNL

Windows下常用IDE來編譯,Linux下直接使用gcc來編譯,編譯過程是Linux嵌入式程式設計的基礎,也是嵌入式高頻基礎面試問題。

一、指令行編譯及各個細分編譯過程

hello.c示例代碼:

#include <stdio.h>

int main(void)
{ 
 printf("Hello world\n");
 return 0;
}
           

編譯:

gcc hello.c -o hello
           
面試官問Linux下如何編譯C程式,如何回答?為你編譯示範

如有必要,還需回答出細分的幾個步驟:

gcc -E hello.c -o hello.i  # 預處理階段
gcc -S hello.i -o hello.s  # 編譯階段
gcc -c hello.s -o hello.o  # 彙編階段
gcc hello.o -o hello       # 連結階段
           

具體細節可查往期筆記:《C程式編譯過程》

二、借助make來編譯

少量檔案時可以使用上面方法編譯。源碼檔案較多時,可借用make工具。make通過解析Makefile檔案來執行一些gcc指令進行編譯。

首先得建立一個Makefile檔案,如:

hello:hello.c
        gcc hello.c -o hello
           

編譯運作:

面試官問Linux下如何編譯C程式,如何回答?為你編譯示範

上面更細分編譯過程的Makefile檔案如下:

面試官問Linux下如何編譯C程式,如何回答?為你編譯示範

關于make及Makefile更多内容可查閱:

【Linux筆記】make工程管理工具(一)

【Linux筆記】make工程管理工具(二)

三、借助CMake生成Makefile

實際開發很少會像上面一樣自己編寫Makefile檔案,可借助cmake工具來生成。

CMake是一個跨平台的安裝(編譯)工具,可以用簡單的語句來描述所有平台的安裝(編譯過程)。

1、指令行操作

首先輸入

cmake --version

指令檢視cmake版本,若還沒安裝則執行如下指令安裝:

sudo apt install cmake
           
面試官問Linux下如何編譯C程式,如何回答?為你編譯示範

下面開始實驗示範。我們的

cmake_test

檔案夾下有一個

hello.c

檔案,在同檔案夾下建立一個

CMakeLists.txt

檔案:

面試官問Linux下如何編譯C程式,如何回答?為你編譯示範

輸入如下内容:

cmake_minimum_required (VERSION 3.10.2)
project (cmake_test)
add_executable(cmake_test hello.c)
           

然後在

cmake_test

目錄下依次輸入如下指令生成Makefile檔案:

mkdir build  # 建立build檔案夾
cd build     # 進入build檔案夾
cmake ../    # 在cmake_test檔案夾下生成Makefile
           

執行結果如下:

面試官問Linux下如何編譯C程式,如何回答?為你編譯示範

關于

CMakeLists.txt

檔案具體文法感興趣的朋友可自行查閱資料進行學習。

2、使用cmake-gui

上述是在指令行下使用cmake生成Makefile進行進行編譯的方法。我們也可以使用圖形化界面來生成Makefile檔案。cmake-gui是cmake的一個圖形化工具。下面依舊以執行個體作為示範。

我們把上一小節的

CMakeLists.txt

hello.c

檔案放入新建立的檔案夾cmake-gui_test中:

面試官問Linux下如何編譯C程式,如何回答?為你編譯示範

在終端輸入

cmake-gui

指令啟動cmake-gu圖形化工具。若未安裝可輸入如下指令進行安裝:

sudo apt install cmake-qt-gui
           

如:

面試官問Linux下如何編譯C程式,如何回答?為你編譯示範

啟動

cmake-gui

面試官問Linux下如何編譯C程式,如何回答?為你編譯示範
面試官問Linux下如何編譯C程式,如何回答?為你編譯示範
面試官問Linux下如何編譯C程式,如何回答?為你編譯示範

檢視cmake-gui_test檔案夾:

面試官問Linux下如何編譯C程式,如何回答?為你編譯示範

編譯運作:

面試官問Linux下如何編譯C程式,如何回答?為你編譯示範

以上分享了一些編譯的過程及方法,都是基礎内容,需要熟練掌握。如果覺得文章對你有幫助,可以從原文管道轉發~

繼續閱讀