linux在線安裝gcc命令步驟,ubuntu安裝gcc編譯器出錯

  • 配置終端的C開發環境

在Ubuntu 終端系統中開發,需要依賴一些命令行工具,對比使用Windows 下的IDE集成開發環境會有一些不同之處。

在Linux 下一般使用gcc 編譯C 語言代碼,gcc 可以通過管理工具進行安裝,以Ubuntu 16.04為例

sudo apt-get install gcc

新建一個C 語言程序進行編譯演練,可以使用vim, 或者是touch命令來創建一個文件。

vim test.c / touch test.c
#include <stdio.h>
int main()
{
    printf("study gcc\n");
    return 0;
}

代碼編輯完成後,使用gcc 命令進行編譯

$ ls
test.c
$ gcc -o test test.c

-o 參數指定可執行程序名,test.c 是源碼文件,當編譯完成後,當前目錄下會出現一個可執行文件test

$ ls
test    test.c

在命令行下,將可執行程序運行起來,看是否會輸出預期的內容:

$ ./test
study gcc
  • 多文件編譯

一般程序都是由多個文件組成,編譯多個文件程序,需要將所有源碼文件傳給編譯器。

以C語言為例,將test.c 拆解成兩個文件,創建test2.c

touch test2.c

#include <strdio.h>
 
void print_test()
{
    printf("study gcc\n");  
}

test2.c 中定義一個函數,函數名為print_test, 用於輸出 “study gcc”.

在test.c中直接調用print_test 即可:

test.c

void print_test();
int main()
{
    print_test();
    return 0;
}

按照以下步驟,編譯由兩個文件組成的程序:

gcc -o test test.c test2.c
  • 解析編譯流程

程序編譯可以進一步分成為編譯(Compile) 和鏈接(Link) 這兩個階段

我們可以分階段編譯test.c, test2.c,源文件如下:

$ ls
test.c    test2.c

編譯test2.c文件, 生成test2.o 對象文件:

$ gcc -c test2.c
$ ls
test2.c    test2.o    test.c

編譯test.c文件,生成test.o 對象文件:

$ gcc -c test.c
$ ls
test2.c  test2.o  test.c  test.o

最後鏈接兩個對象文件,生成可執行程序:

$ gcc -o test test.o test2.o
$ ./test
stduy gcc
  • 關於分階段編譯

分階段編譯的最大好處是, 可以進行部分編譯 ==> 只是編譯有變更的部分

在上面的例子中,test.c 有變更,而test2.c 沒有變更,那麼,我們只需要編譯test.c 生成新的test.o 對象文件,最後再跟test2.o 文件鏈接生成新的可執行文件test。

可以省去編譯test2.c 這段時間,如果文件較多,節省的編譯時間就會很長。

  • 使用Makefile 自動編譯

touch Makefile

.DEFAULT_GOAL := run

test2.o: test2.c
  gcc -o test2.o -c test2.c

test.o: test.c
  gcc -o test.o -c test.c

test: test2.o test.o
  gcc -o test test2.o test.o

run: test
  ./test

clean:
  rm -f *.o
  rm -f test
  

$ ls
Makefile  test2.c  test.c
$ make
gcc -o test2.o -c test2.c
gcc -o test.o -c test.c
gcc -o test test2.o test.o
./test
stduy gcc

執行make 命令

$ ls
Makefile  test2.c  test.c
$ make
gcc -o test2.o -c test2.c
gcc -o test.o -c test.c
gcc -o test test2.o test.o
./test
stduy gcc

Makefile 大致可以理解成 目標 、 依賴 以及 構建指令 。

預設情況下,Makefile定義的第一個目標為默認目標,在第一行顯式定義了默認目標,由於沒有變更,再次構建時自動省略編譯環節。

$ make
./test
study gcc

定義用於清理編譯結果的目標 ==》 clean:

$ ls
Makefile  test  test2.c  test2.o  test.c  test.o
$ make clean
rm -f *.o
rm -f test
$ ls
Makefile  test2.c  test.c

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/234161.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-11 17:54
下一篇 2024-12-11 17:54

相關推薦

發表回復

登錄後才能評論