天天看點

在Ubuntu系統下使用gcc和Makefile編譯程式(一)用gcc編譯C程式并運作(二)在Windows平台編譯C程式并運作(三)使用Makefile編譯C程式并運作

文章目錄

  • (一)用gcc編譯C程式并運作
        • 1.在終端中安裝gcc
        • 2.用gcc編譯C程式
          • (1)編寫一個hello.c檔案
            • (2)編寫一個主程式檔案main1.c和子程式檔案sub1.c
  • (二)在Windows平台編譯C程式并運作
  • (三)使用Makefile編譯C程式并運作

(一)用gcc編譯C程式并運作

1.在終端中安裝gcc

  • 輸入下列指令
sudo apt update
           

回車後輸入密碼後更新包清單

在Ubuntu系統下使用gcc和Makefile編譯程式(一)用gcc編譯C程式并運作(二)在Windows平台編譯C程式并運作(三)使用Makefile編譯C程式并運作
  • 輸入下列指令安裝軟體包
sudo apt install build-essential
           
在Ubuntu系統下使用gcc和Makefile編譯程式(一)用gcc編譯C程式并運作(二)在Windows平台編譯C程式并運作(三)使用Makefile編譯C程式并運作
  • 輸入”Y“後回車繼續
  • 輸入以下指令驗證gcc編譯器是否安裝成功
gcc --version
           
在Ubuntu系統下使用gcc和Makefile編譯程式(一)用gcc編譯C程式并運作(二)在Windows平台編譯C程式并運作(三)使用Makefile編譯C程式并運作

如圖出現gcc 9.3.0即表示安裝成功!

2.用gcc編譯C程式

(1)編寫一個hello.c檔案
  • 在Documents中打開終端
  • 輸入

    touch

    指令建立一個名為hello的檔案夾
touch hello.c
           
  • 輸入

    nano

    指令打開hello.c檔案
nano hello.c
           
  • 寫入代碼後”ctrl s“儲存,然後退出
#include<stdio.h>
int main(void)
{
  printf("HELLO WORLD\n");
  return 0;
}
           
  • 輸入以下指令将hello.c檔案進行預處理、彙編、編譯并連結形成可執行檔案hello,-o選項用來指定輸出檔案的檔案名。
gcc hello.c -o hello
           
  • 輸入以下指令得到輸出結果(“.”代表目前目錄)
./hello
           
  • 運作結果如下
    在Ubuntu系統下使用gcc和Makefile編譯程式(一)用gcc編譯C程式并運作(二)在Windows平台編譯C程式并運作(三)使用Makefile編譯C程式并運作

(2)編寫一個主程式檔案main1.c和子程式檔案sub1.c

  • 用上述方法建立一個檔案main1.c,并寫入程式然後儲存
#include"sub1.c"
int main()
{
     int x=2,y=5;
     printf("%.2f\n",x2x(x,y));
     return 0;
}
           
  • 用同樣的方法建立檔案sub1.c,并寫入程式然後儲存
#include<stdio.h>
float x2x(int x,int y)
{
    float ans;
    ans=(float)y/(float)x;
    return ans;
}
           
  • 輸入以下指令将main1.c檔案進行預處理、彙編、編譯并連結形成可執行檔案main1,然後得到輸出結果
在Ubuntu系統下使用gcc和Makefile編譯程式(一)用gcc編譯C程式并運作(二)在Windows平台編譯C程式并運作(三)使用Makefile編譯C程式并運作

(二)在Windows平台編譯C程式并運作

  • 在vs2019上建立一個新.cpp檔案,命名為源,然後輸入代碼
//main1.c
#include<stdio.h>
#include"sub1.c"
float x2x(int x, int y);
int main(void)
{
	int x = 2, y = 5;
	printf("%.2f", x2x(x, y));
	return 0;
}

           
  • 再建立一個新.c檔案,命名為sub1,然後輸入代碼
//sub1.c
#include<stdio.h>
float x2x(int x, int y)
{
	float ans;
	ans = (float)y / (float)x;
	return ans;
}
           
  • 再進行本地調試,開始編譯執行代碼,結果如下
    在Ubuntu系統下使用gcc和Makefile編譯程式(一)用gcc編譯C程式并運作(二)在Windows平台編譯C程式并運作(三)使用Makefile編譯C程式并運作

(三)使用Makefile編譯C程式并運作

  • 輸入

    touch

    指令建立一個txt檔案并命名為makefile
touch makefile.txt
mv makefile.txt makefile
           
  • 在makefile檔案中寫入以下代碼
//注意使用tab縮進
main1:main1.o  //左邊的main1是目标檔案,目标檔案依賴于冒号右邊
	gcc main1.o -o main1  //必須以tab開頭隔開
main1.o:main1.S
	gcc -c main1.S -o main1.o
main1.S:main1.i
	gcc -S main1.i -o main1.S
main1.i:main1.c
	gcc -E main1.c -o main1.i
.PHONY:  //僞目标标記,僞目标标記後的指令不會和目錄下檔案重複
         //也就是說clean如果沒有僞目标标記的話,目錄下有一個clean的檔案
         //make clean将不會正确執行
clean:
	rm -rf main1.o main1.S main1.i main1
           
  • 打開終端,輸入

    make

    指令得到可執行檔案main1;編譯後用

    make clean

    指令進行清除
make  
make clean
           
  • 結果如下
    在Ubuntu系統下使用gcc和Makefile編譯程式(一)用gcc編譯C程式并運作(二)在Windows平台編譯C程式并運作(三)使用Makefile編譯C程式并運作

// 初次寫博(●ˇ∀ˇ●),請多多指教(ง •_•)ง