關(guān)于Linux下對(duì)于makefile的理解
什么是makefile呢?在Linux下makefile我們可以把理解為工程的編譯規(guī)則。一個(gè)工程中源文件不計(jì)數(shù),其按類型、功能、模塊分別放在若干個(gè)目錄中,makefile定義了一系列的規(guī)則來指定,那些文件需要先編譯,那些文件需要后編譯,那些文件需要重新編譯,甚至于進(jìn)行更復(fù)雜的功能操作,因?yàn)閙akefile就像一個(gè)shell腳本一樣,其中也可執(zhí)行操作系統(tǒng)的命令。
makefile帶來的好處就是---“自動(dòng)化編譯”,一旦寫好,只需要一個(gè)make命令,整個(gè)工程完全自動(dòng)編譯,極大地提高了軟件開發(fā)的效率。
make命令在執(zhí)行時(shí),需要一個(gè)makefile文件,以告訴make命令要怎樣去編譯鏈接程序。只要我們makefile寫的足夠好,make命令會(huì)自動(dòng)智能的根據(jù)當(dāng)前文件自己編譯所需要的文件和鏈接目標(biāo)文件。
makefile的規(guī)則:
target:prerequisites command .......................
target是目標(biāo)文件,prerequisites就是要生成target所需要的文件或是目標(biāo)。command就是make需要執(zhí)行的命令。這是一個(gè)文件依賴關(guān)系,也就是說,target這一個(gè)或多個(gè)的目標(biāo)文件依賴于prerequisites中的文件,其生成規(guī)則定義在command中。如果prerequisites中如果有一個(gè)以上的文件比target文件內(nèi)容要新的話,command所定義的文件就會(huì)被執(zhí)行。這就是makefile最核心的內(nèi)容。
舉個(gè)栗子:
先準(zhǔn)備三個(gè)文件:file1.c,file2.c,file2.h
file1.c:
#include<iostream>
int main()
{
file2printf();
return 0;
}
file2.h:
#ifndef FILE2_H_
#define FILE2_H_
void file2printf();
#endif
file2.c
#include"file2.h"
void file2printf()
{
printf("hello world!\n");
}
那么它的makefile怎么寫呢?(makefile文件和文件在同一目錄下)
test:file1.o file2.o //test依賴file1.o和file2.o兩個(gè)目標(biāo)文件
gcc -c file1.o file2.o -o test //編譯出test可執(zhí)行文件,-o 表示指定的目標(biāo)文件名
file1.o:file1.c file2.h //編譯出file1.o文件,file1.o依賴于file1.c和file2.h,-c表示GCC只把給他的文件編譯成目標(biāo)文件
gcc -c file1.c -o file1.o
file2.o:file2.c file2.h //這兩句與上兩句相同
gcc -c file2.c -o file2.o
.PHONY:clean
clean:
rm -rf* .o test //當(dāng)輸入make clean命令時(shí),就會(huì)刪除所有的.o文件和test文件了
注意:每個(gè)命令行之前都必須有tab符號(hào)。
這是簡單的makefile的寫法,其實(shí)makefile還有很多的功能注意點(diǎn)值得學(xué)習(xí)。大家可以下去自行學(xué)習(xí)
以上這篇關(guān)于Linux下對(duì)于makefile的理解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
實(shí)戰(zhàn)基本的Linux sed命令示例代碼
Linux流編輯器是在數(shù)據(jù)中心中運(yùn)行腳本的一種有用方法。通過這些命令示例,您可以開始熟悉sed,需要的朋友可以參考下2018-10-10
戴爾Dell?R630配置raid?安裝centos系統(tǒng)
這篇文章主要介紹了戴爾R630服務(wù)器配置raid后安裝centos7.9的方法,需要的朋友可以參考下2024-03-03
Linux使用cron定時(shí)任務(wù)被隱藏的解決方法
這篇文章主要為大家詳細(xì)介紹了Linux使用cron定時(shí)任務(wù)出現(xiàn)被隱藏的情況的解決方法,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
winxp apache用php建本地虛擬主機(jī)的方法
windows xp用php建本地虛擬主機(jī)的方法(注:以下目錄是筆者系統(tǒng)目錄)2009-07-07
用shell命令刪除網(wǎng)站最新nb掛馬的方法與代碼
教你刪除網(wǎng)站最新NB掛馬最近發(fā)現(xiàn) 很多網(wǎng)站被掛了木馬,會(huì)在頁面中生成如下代碼。2010-02-02
socket unix domain IPC的實(shí)例代碼
下面小編就為大家?guī)硪黄猻ocket unix domain IPC的實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12
Windows 和 Linux 上Redis的安裝守護(hù)進(jìn)程配置方法
​ Redis是目前最常用的非關(guān)系型數(shù)據(jù)庫(NOSql)之一,常以Key-Value的形式存儲(chǔ)。這篇文章主要介紹了Windows 和 Linux 上Redis的安裝守護(hù)進(jìn)程配置 ,需要的朋友可以參考下2019-06-06

