windows下的gcc使用

williamgavin發表於2018-11-08

緣起

在windows有很多整合開發環境(vs系列,code::blocks等等)可以用,為什麼要使用gcc在dos下面編譯一個c程式呢?因為博主最近要看一下uC/OS-II方面的東西,然後教材使用的是:任哲的《嵌入式實時作業系統μCOS-II原理及應用》,在這本書裡面介紹將c語言程式一步步編譯執行的時候使用的是Borland C++3.1精簡版,這個編譯器在Turbo C的時代是非常受歡迎的,但是在2009年的時候Borland公司都已經被Micro Focus收購了。所以我就想直接用gcc,不用Borland C++了。

正文

安裝gcc

首先安裝gcc編譯器,這個網上都有教程,如果之前有用過類似code::blocks的整合開發環境的話,gcc編譯器都安裝好了。博主之前是安裝過code::blocks的,所以第一步省了。給個圖
在這裡插入圖片描述
MinGW這個目錄就是gcc移植到windows的結果。因為gcc只是個編譯器嘛,如果要在windows這個平臺下使用的話肯定是要加點東西的。MinGW本身也存在多個分支,可以在Windows、Linux中編譯能在Windows中執行的二進位制程式碼。

記得先給這個bin目錄加個PATH環境變數

使用gcc來編譯c語言程式

使用gcc可以直接編譯一個c語言程式,也可以一步步來編譯。如下:

直接編譯生成.exe檔案

在桌面上建立一個main.c檔案

# include <stdio.h>
int main (void)
{
	printf("hello world!!!");
	return 0;
}

開啟cmd,進入main.c所在目錄

C:\Users\Administrator\Desktop>
  • 生成main.exe:gcc -o main.exe main.c
  • 執行main.exe:main
C:\Users\Administrator\Desktop>gcc main.o -o main

C:\Users\Administrator\Desktop>main
hello world!!!

生成的檔案如下圖:
在這裡插入圖片描述

在cmd裡面使用gcc編譯器編譯c檔案流程

進入main.c檔案所在目錄

  1. 預編譯處理,生成main.i檔案:gcc -E main.c -o main.i
  2. 編譯處理,生成main.s檔案:gcc -S main.i -o main.s
  3. 彙編處理,生成main.o檔案:gcc -c main.i -o main.o
  4. 連結處理,生成main.exe檔案:gcc main.o -o main
  5. 執行main.exe:main
C:\Users\Administrator\Desktop>gcc -E main.c -o main.i

C:\Users\Administrator\Desktop>gcc -S main.i -o main.s

C:\Users\Administrator\Desktop>gcc -c main.i -o main.o

C:\Users\Administrator\Desktop>gcc main.o -o main

C:\Users\Administrator\Desktop>main
hello world!!!

生成的檔案如下圖所示:
在這裡插入圖片描述

利用gcc編譯多個c語言原始檔

第一步建立檔案

在桌面建立一個資料夾(main),然後在該資料夾裡面建立6個檔案,分別為pa.c、pa.h、pb.c、pb.h、pc.c、pc.h、test.c。基本思路是在test.c檔案裡面引用pa.c、pb.c、pc.c檔案裡的內容。各個檔案的程式碼如下所示:

// pa.h
# ifndef PA_H
# define PA_H
void A_print();
# endif
// pa.c
# include <stdio.h>
# include "pa.h"

void A_print()
{
	printf("AAAAAAAAA\n");
}
// pb.h
# ifndef PB_H
# define PB_H
void B_print();
# endif
// pb.c
# include <stdio.h>
# include "pb.h"

void B_print()
{
	printf("BBBBBBBB\n");
}
// pc.h
# ifndef PC_H
# define PC_H
void C_print();
# endif
// pc.c
# include <stdio.h>
# include "pc.h"

void C_print()
{
	printf("CCCCCCCC\n");
}
// test.c
# include "pa.h"
# include "pb.h"
# include "pc.h"
int main (void)
{
	int i = 0;
	for(i; i < 10; i++)
	{
		A_print();
		B_print();
		C_print();
	}
	return 0;
}

編譯檔案

利用上面說過的gcc命令將pa.c、pb.c、pc.c、test.c三個檔案編譯形成.o檔案。形成之後的main目錄如下圖所示
在這裡插入圖片描述

連結 & 執行

下面將pa.o、pb.o、pc.o、test.o檔案連結生成test.exe

C:\Users\Administrator\Desktop\main>gcc pa.o pb.o pc.o test.o -o test

然後執行,結果和意料之中的一樣。
在這裡插入圖片描述

gcc基本引數

  • -o:指定輸出檔名
  • -E:只進行預處理,不編譯
  • -S:只編譯,不彙編
  • -c:只編譯、彙編,不連結
  • -g:包含除錯資訊
  • -I:指定include包含的搜尋目錄
  • -o:輸出成指定檔名

參考文獻

https://zhidao.baidu.com/question/380094783.html
Microsoft Visual C++ 和 Borland C++ Builder 之比較:
gcc編譯C語言程式的執行過程
GCC 編譯詳解

相關文章