Linux C文件编译
設(shè)置編輯器
1.TAB鍵設(shè)置為4空格。
首先用vim打開/etc/vim/vimrc文件,這里面發(fā)現(xiàn)root用戶才能修改vimrc文件,所以用sudo命令暫時切換到root用戶。
在vimrc文件最后面,輸入set ts =4完成設(shè)置。
然后保存,關(guān)閉文件。
2.VIM編輯器顯示行號。
在上面的文件最后一行加入set nu即可。
編寫代碼
編譯代碼
Ubuntu下,C語言編譯器是GCC。
使用gcc -v查看GCC編譯器版本號。
可知,本機(jī)GCC編譯器版本為5.4.0。
Ubuntu自帶的GCC編譯器針對X86架構(gòu),只能編譯在X86架構(gòu)CPU上運(yùn)行的程序。
編譯在ARM上運(yùn)行的程序,需要ARM的GCC編譯器。
gcc main.c,編譯main.c文件。編譯完成以后,生成一個a.out文件,這就是編譯生成的可執(zhí)行文件。使用./a.out,運(yùn)行可執(zhí)行文件。
a.out文件的命名,是GCC編譯器自動命名的。使用gcc命令時,加上-o,可以指定生成的可執(zhí)行文件名字。
GCC編譯器
gcc命令格式:
gcc [選項(xiàng)] [文件名字]選項(xiàng):
-c:只編譯不鏈接為可執(zhí)行文件,編譯器將輸入的.c 文件編譯為.o 的目標(biāo)文件。
-o:<輸出文件名>指定編譯結(jié)束以后的輸出文件名,如果不使用這個選項(xiàng),GCC默認(rèn)編譯出來的可執(zhí)行文件名字為 a.out。
-g:添加調(diào)試信息,如果要使用調(diào)試工具(如GDB)的話就必須加入此選項(xiàng),此選項(xiàng)指示編譯的時候生成調(diào)試所需的符號信息。
-O:對程序進(jìn)行優(yōu)化編譯,如果使用此選項(xiàng)的話整個源代碼在編譯、鏈接的的時候都會進(jìn)行優(yōu)化,這樣產(chǎn)生的可執(zhí)行文件執(zhí)行效率就高。
-O2:比-O 更幅度更大的優(yōu)化,生成的可執(zhí)行效率更高,但是整個編譯過程會很慢。
GCC編譯器,能夠檢測出錯誤類型,標(biāo)記錯誤發(fā)生在哪個文件、哪一行。
GCC編譯器編譯流程:預(yù)處理、編譯、匯編、鏈接。
預(yù)處理:展開所有頭文件,替換程序中的宏、解析條件編譯,并添加到文件中。
編譯:將經(jīng)過預(yù)處理的代碼編譯成匯編代碼。
匯編:將匯編語言文件編譯成二進(jìn)制目標(biāo)文件。
鏈接:將匯編出來的多個二進(jìn)制目標(biāo)文件鏈接在一起,形成最終的可執(zhí)行文件。
多個文件的編譯
例子:鍵盤輸入兩個整形數(shù)字,計(jì)算他們的和,將結(jié)果顯示在屏幕上。
//main.c #include <stdio.h> #include "input.h" #include "calcu.h"int main(int argc, char *argv[]) {int a, b, num;input_int(&a, &b);num = calcu(a, b);printf("%d + %d = %d\r\n", a, b, num); }//input.c #include <stdio.h> #include "input.h"void input_int(int *a, int *b) { printf("input two num:"); scanf("%d %d", a, b); printf("\r\n"); }//calcu.c #include "calcu.h" int calcu(int a, int b) {return (a + b); }//input.h #ifndef _INPUT_H #define _INPUT_Hvoid input_int(int *a, int *b); #endif//calcu.h #ifndef _CALCU_H #define _CALCU_Hint calcu(int a, int b); #endif可以使用下面這個語句對三個文件編譯,生成名為main的可執(zhí)行文件。
gcc main.c calcu.c input.c -o main編譯完之后,執(zhí)行main,流程如下。
但是以上方法存在問題:1.如果文件數(shù)量多,不方便。2.使用上面命令,編譯時所有文件會重新編譯,耗時多。3.沒有修改的文件不需要再次重新編譯。
一個解決方法如下:
gcc -c main.c gcc -c input.c gcc -c calcu.c gcc main.o input.o calcu.o -o main-c選項(xiàng),只編譯不鏈接。
最后的命令是將所有.o文件鏈接成可執(zhí)行文件main。
如果修改input.c文件,只需要將input.c重新編譯成.o文件,執(zhí)行下面兩條命令:
gcc -c input.c gcc main.o input.o calcu.o -o main但是,存在問題:修改文件多,不知道哪個文件修改過。
Makefile
以上,是通過在終端執(zhí)行g(shù)cc 命令完成C文件的編譯。文件很多,上面的方法就不好使了。
Makefile文件,描述哪些文件需要編譯或重新編譯。
Makefile里面,可以執(zhí)行系統(tǒng)命令。
使用make命令,可完成整個工程的自動編譯。
仍然對于上面的例子:鍵盤輸入兩個整形數(shù)字,計(jì)算他們的和,將結(jié)果顯示在屏幕上。
創(chuàng)建Makefile文件,輸入如下內(nèi)容:
使用Makefile編譯文件的過程如下。
修改了input.c文件之后,再執(zhí)行make命令,發(fā)現(xiàn)只是重新編譯了input.c文件。
如果工程沒有編譯過,工程中所有.c 文件都被編譯并且鏈接成可執(zhí)行程序。
工程中只有個別C文件被修改,只編譯這些被修改的C文件,并且鏈接成可執(zhí)行文件。
工程的頭文件被修改了,只需要編譯所有引用這個頭文件的C文件,并且鏈接成可執(zhí)行文件。
總結(jié)
以上是生活随笔為你收集整理的Linux C文件编译的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 输出指定范围内的完数
- 下一篇: 单片机实验:外部中断按键