Linux下使用make命令編譯c原始檔
make命令是GNU的工程化編譯工具,用於編譯眾多相互關聯的原始碼問價,以實現工程化的管理,提高開發效率。
make命令唯一讀取的檔案是Makefile,在較大的專案中,有些檔案沒有編譯有些編譯過,Makefile中指定一定的規則來對整個專案的所有檔案新型編譯,make命令讀取檔案,按照規則編譯未編譯的檔案。
因此使用make命令可以避免使用gcc命令進行繁瑣的執行編譯。
以三個檔案為例:
max.c:
int max(int a,int b)
{
if(a > b){
return a;
}else{
return b;
}
}
min.c:
int min(int a,int b)
{
if(a < b){
return a;
}else{
return b;
}
}
res.h:
int max(int a,int b);
int min(int a,int b);
res.c:
#include <stdio.h>
#include "cal.h"
int main()
{
int a = 99;
int b = 88;
int maxVal = max(a,b);
int minVal = min(a,b);
printf("the max value is %d\nthe min value is %d\n",maxVal,minVal);
return 0;
}
在res.c中引用了兩個max和min,分別計算兩個整型的最大和最小值
如果不使用make命令,列印res.c的最終結果需要執行步驟:
先分別編譯max.c和min.c為max.o和min.o檔案;
再編譯res.c生成可執行檔案,然後執行可執行檔案即可得到結果。
使用make命令編譯過程:
1.建立並編輯Makefile檔案
規則格式為:
<生成可執行二進位制檔名>:<引入的.o檔案1> <引入的.o檔案2> <c原始檔>
<gcc執行命令>
# this is a make file
res.out:max.o min.o
gcc max.o min.o res.c
max.o:max.c
gcc -c max.c
min.o:min.c
gcc -c min.c
執行命令如下:
ming@ming-TM1604:/home/wwwroot/test/c$ vim Makefile
ming@ming-TM1604:/home/wwwroot/test/c$ ls
cal.h Makefile max.c min.c res.c
ming@ming-TM1604:/home/wwwroot/test/c$ make
gcc -c max.c
gcc -c min.c
gcc max.o min.o res.c -o res.out
ming@ming-TM1604:/home/wwwroot/test/c$ ls
cal.h Makefile max.c max.o min.c min.o res.c res.out
ming@ming-TM1604:/home/wwwroot/test/c$ ./res.out
the max value is 99
the min value is 88
ming@ming-TM1604:/home/wwwroot/test/c$
最終make工具會根據Makefile的規則執行所有的編譯,並根據引用對未編譯的引用檔案進行編譯。
注:Linux若沒有自帶make工具,則需要進行安裝,使用make -v可以檢視版本
apt-get install make
make -v
相關文章
- 在使用make編譯時,修改原始檔的註釋內容,是否會重新編譯?編譯
- 如何在Windows下使用make編譯MakefileWindows編譯
- 【C語言】linux下多檔案編譯C語言Linux編譯
- caffe make 編譯編譯
- Linux下C語言編譯的問題LinuxC語言編譯
- linux下基於官方原始碼編譯ipoptLinux原始碼編譯
- Make編譯之編譯32bit ffmpeg編譯
- LevelDB C++教程: Linux下編譯與安裝C++Linux編譯
- LINUX下編譯TriangleLinux編譯
- C語言 Make命令教程C語言
- 使用CMake命令編譯Android平臺下的包編譯Android
- 在Linux上使用vscode編譯除錯C/C++程式碼LinuxVSCode編譯除錯C++
- c語言多檔案編譯C語言編譯
- 使用make命令建立Service類
- Linux環境下, 原始碼編譯安裝詳解 (編譯CMake 3.15 和 gcc 5.3.0 為例)Linux原始碼編譯GC
- C編譯: 使用gdb除錯編譯除錯
- 在linux下編譯hibernate筆記Linux編譯筆記
- 在Ubuntu環境下用gcc命令執行c程式以及Makefile編譯UbuntuGCC程式編譯
- 求助 :ubuntu 編譯核心後(make -jn),sudo make modules_install報錯Ubuntu編譯
- 使用 make:service 命令快速生成 Services
- linux環境下vscode 中C/C++編譯及除錯環境的搭建LinuxVSCodeC++編譯除錯
- 從原始檔到可執行檔案:原始檔的預處理、編譯、彙編、連結編譯
- 編譯Android下可執行命令的FFmpeg編譯Android
- 使用 split 命令分割 Linux 檔案Linux
- Linux下nginx編譯安裝教程和編譯引數詳解LinuxNginx編譯
- protobuf 的交叉編譯使用(C++)編譯C++
- C2000 編譯器下載地址編譯
- Android 11 原始碼下載+編譯教程Android原始碼編譯
- 使用lmbench測試linux效能-編譯Linux編譯
- 如何在Linux下編譯安裝MariaDBLinux編譯
- Linux 環境下編譯安裝 RedisLinux編譯Redis
- Linux系統下編譯Openssl 步驟:Linux編譯
- Linux環境PostGIS原始碼編譯安裝Linux原始碼編譯
- 為什麼用某些用git clone下載的原始碼 無法使用./configure命令和make命令執行安裝Git原始碼
- AndroidStudio使用NDK編譯C/C++程式碼使用原生庫Android編譯C++
- 11.使用make更新歸檔檔案
- A40i &T3 全原始碼編譯-ARM Linux核心在PC Linux的編譯方法原始碼編譯Linux
- Linux使用命令列編譯並用st-link燒錄STM32Linux命令列編譯