国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Linux Makefile由淺入深剖析

系統(tǒng) Linux
本文主要講解linux Makefile的相關(guān)。例如:在Makefile中“規(guī)則”就是描述在什么情況下、如何重建規(guī)則的目標(biāo)文件,通常規(guī)則中包括了目標(biāo)的依賴關(guān)系(目標(biāo)的依賴文件)和重建目標(biāo)的命令。

經(jīng)過(guò)長(zhǎng)時(shí)間學(xué)習(xí)linux Makefile,于是和大家分享一下,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。

假設(shè)我們有一個(gè)程序由5個(gè)文件組成,源代碼如下:
/*main.c*/
#include "mytool1.h"
#include "mytool2.h"
int main()
{
mytool1_print("hello mytool1!");
mytool2_print("hello mytool2!");
return 0;
}
/*mytool1.c*/
#include "mytool1.h"
#include
void mytool1_print(char *print_str)
{
printf("This is mytool1 print : %s ", print_str);
}
/*mytool1.h*/
#ifndef _MYTOOL_1_H
#define _MYTOOL_1_H
void mytool1_print(char *print_str);
#endif
/*mytool2.c*/
#include "mytool2.h"
#include
void mytool2_print(char *print_str)
{
printf("This is mytool2 print : %s ", print_str);
}
/*mytool2.h*/
#ifndef _MYTOOL_2_H
#define _MYTOOL_2_H
void mytool2_print(char *print_str);
#endif

首先了解一下make和linux Makefile。GNU make是一個(gè)工程管理器,它可以管理較多的文件。我所使用的RedHat 9.0的make版本為GNU Make version 3.79.1。使用make的***好處就是實(shí)現(xiàn)了“自動(dòng)化編譯”。如果有一個(gè)上百個(gè)文件的代碼構(gòu)成的項(xiàng)目,其中一個(gè)或者幾個(gè)文件進(jìn)行了修改,make就能夠自動(dòng)識(shí)別更新了的文件代碼,不需要輸入冗長(zhǎng)的命令行就可以完成***的編譯工作。make執(zhí)行時(shí),自動(dòng)尋找Makefile(makefile)文件,然后執(zhí)行編譯工作。所以我們需要編寫Makefile文件,這樣可以提高實(shí)際項(xiàng)目的工作效率。

在一個(gè)linux Makefile中通常包含下面內(nèi)容:
1、需要由make工具創(chuàng)建的目標(biāo)體(target),通常是目標(biāo)文件或可執(zhí)行文件。
2、要?jiǎng)?chuàng)建的目標(biāo)體所依賴的文件(dependency_file)。
3、創(chuàng)建每個(gè)目標(biāo)體時(shí)需要運(yùn)行的命令(command)。
格式如下:
target:dependency_files
command
target:規(guī)則的目標(biāo)。通常是程序中間或者***需要生成的文件名,可以是.o文件、也可以是***的可執(zhí)行程序的文件名。另外,目標(biāo)也可以是一個(gè)make執(zhí)行的動(dòng)作的名稱,如目標(biāo)“clean”,這樣的目標(biāo)稱為“偽目標(biāo)”。dependency_files:規(guī)則的依賴。生成規(guī)則目標(biāo)所需要的文件名列表。通常一個(gè)目標(biāo)依賴于一個(gè)或者多個(gè)文件。

command:規(guī)則的命令行。是make程序所有執(zhí)行的動(dòng)作(任意的shell命令或者可在shell下執(zhí)行的程序)一個(gè)規(guī)則可以有多個(gè)命令行,每一條命令占一行。注意:每一個(gè)命令行必須以[Tab]字符開始,[Tab]字符告訴make此行是一個(gè)命令行。make按照命令完成相應(yīng)的動(dòng)作。這也是書寫Makefile中容易產(chǎn)生,而且比較隱蔽的錯(cuò)誤。命令就是在任何一個(gè)目標(biāo)的依賴文件發(fā)生變化后重建目標(biāo)的動(dòng)作描述。一個(gè)目標(biāo)可以沒(méi)有依賴而只有動(dòng)作(指定的命令)。比如Makefile中的目標(biāo)“clean”,此目標(biāo)沒(méi)有依賴,只有命令。它所指定的命令用來(lái)刪除make過(guò)程產(chǎn)生的中間文件(清理工作)。

在Makefile中“規(guī)則”就是描述在什么情況下、如何重建規(guī)則的目標(biāo)文件,通常規(guī)則中包括了目標(biāo)的依賴關(guān)系(目標(biāo)的依賴文件)和重建目標(biāo)的命令。make執(zhí)行重建目標(biāo)的命令,來(lái)創(chuàng)建或者重建規(guī)則的目標(biāo)(此目標(biāo)文件也可以是觸發(fā)這個(gè)規(guī)則的上一個(gè)規(guī)則中的依賴文件)。規(guī)則包含了目標(biāo)和依賴的關(guān)系以及更新目標(biāo)所要求的命令。

Makefile中可以包含除規(guī)則以外的部分。一個(gè)最簡(jiǎn)單的Makefile可能只包含規(guī)則描述。規(guī)則在有些Makefile中可能看起來(lái)非常復(fù)雜,但是無(wú)論規(guī)則的書寫是多么的復(fù)雜,它都符合規(guī)則的基本格式。

下面就可以寫出***個(gè)Makefile了。
main:main.o mytool1.o mytool2.o
gcc -o main main.o mytool1.o mytool2.o
main.o:main.c mytool1.h mytool2.h
gcc -c main.c
mytool1.o:mytool1.c mytool1.h
gcc -c mytool1.c
mytool2.o:mytool2.c mytool2.h
gcc -c mytool2.c
clean:
rm -f *.o main

在shell提示符下輸入make,執(zhí)行顯示:
gcc -c main.c
gcc -c mytool1.c
gcc -c mytool2.c
gcc -o main main.o mytool1.o mytool2.o

執(zhí)行結(jié)果如下:
[armlinux@lqm makefile-easy]$ ./main
This is mytool1 print : hello mytool1!
This is mytool2 print : hello mytool2!
這只是最為初級(jí)的Makefile,現(xiàn)在來(lái)對(duì)這個(gè)Makefile進(jìn)行改進(jìn)。

改進(jìn)一:使用變量
一般在書寫Makefile時(shí),各部分變量引用的格式如下:
1. make變量(Mak1. make變量(Makefile中定義的或者是make的環(huán)境變量)的引用使用“$(VAR)”格式,無(wú)論“VAR”是單字符變量名還是多字符變量名。
2. 出現(xiàn)在規(guī)則命令行中shell變量(一般為執(zhí)行命令過(guò)程中的臨時(shí)變量,它不屬于Makefile變量,而是一個(gè)shell變量)引用使用shell的“$tmp”格式。
3. 對(duì)出現(xiàn)在命令行中的make變量同樣使用“$(CMDVAR)” 格式來(lái)引用。
OBJ=main.o mytool1.o mytool2.o
make:$(OBJ)
gcc -o main $(OBJ)
main.o:main.c mytool1.h mytool2.h
gcc -c main.c
mytool1.o:mytool1.c mytool1.h
gcc -c mytool1.c
mytool2.o:mytool2.c mytool2.h
gcc -c mytool2.c
clean:
rm -f main $(OBJ)

改進(jìn)二:使用自動(dòng)推導(dǎo)
讓make自動(dòng)推導(dǎo),只要make看到一個(gè).o文件,它就會(huì)自動(dòng)的把對(duì)應(yīng)的.c文件加到依賴文件中,并且gcc -c  .c也會(huì)被推導(dǎo)出來(lái),所以Makefile就簡(jiǎn)化了。
CC = gcc
OBJ = main.o mytool1.o mytool2.o
make: $(OBJ)
$(CC) -o main $(OBJ)
main.o: mytool1.h mytool2.h
mytool1.o: mytool1.h
mytool2.o: mytool2.h
.PHONY: clean
clean:
rm -f main $(OBJ)

改進(jìn)三:自動(dòng)變量($^  $<  $@)的應(yīng)用
Makefile 有三個(gè)非常有用的變量,分別是$@、$^、$<。代表的意義分別是:
$@--目標(biāo)文件,
$^--所有的依賴文件,
$<--***個(gè)依賴文件。
CC = gcc
OBJ = main.o mytool1.o mytool2.o
main: $(OBJ)
$(CC) -o $@ $^
main.o: main.c mytool1.h mytool2.h
$(CC) -c $<
mytool1.o: mytool1.c mytool1.h
$(CC) -c $<
mytool2.o: mytool2.c mytool2.h
$(CC) -c $<
.PHONY: clean
clean:
rm -f main $(OBJ)
 這些是最為初級(jí)的知識(shí),現(xiàn)在至少可以減少編譯時(shí)的工作量。細(xì)節(jié)方面的東西還需要在以后的工作和學(xué)習(xí)中不斷的總結(jié),不斷的深化理解。可以 參考GNU Make手冊(cè),這里講解的比較全面。

【編輯推薦】

  1. linux makefile文件心得筆記
  2. 講述linux脫機(jī)打印命令
  3. 詳細(xì)解析:Linux操作系統(tǒng)的無(wú)線網(wǎng)絡(luò)命令
  4. Linux之父Linus向Windows 7豎起大拇指
  5. 全面講述linux集群負(fù)載均衡
責(zé)任編輯:薛輩輩 來(lái)源: Linux
相關(guān)推薦

2009-12-14 10:47:34

Linux makef

2009-10-26 11:34:42

linux makef

2010-06-22 17:09:52

Linux Autom

2010-03-01 09:57:55

Linux Makef

2010-02-25 15:11:48

Linux Makef

2010-03-01 16:40:40

Linux Makef

2020-12-02 08:30:27

Java Synchroniz并發(fā)

2010-03-25 17:20:00

CentOS入門

2021-07-09 06:28:49

ZabbixLinux運(yùn)維

2010-03-10 15:44:04

2017-09-12 09:22:51

LinuxMakefileautoconf工具

2010-06-22 17:28:35

Linux Autom

2019-07-03 15:14:00

Oracle存儲(chǔ)結(jié)構(gòu)

2009-10-27 17:58:12

linux make命

2010-01-07 13:44:54

Linux內(nèi)核代碼

2010-03-04 17:36:01

Linux系統(tǒng)分區(qū)

2009-06-17 17:00:03

2010-03-03 14:30:35

Linux睡眠休眠

2009-11-25 09:16:34

SUSE Linux

2010-03-08 14:40:27

Linux進(jìn)程調(diào)度
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

99久久国产综合精品色伊| 六月婷婷在线视频| 国外av在线| 亚洲精品乱码| 亚洲奶大毛多的老太婆| fc2ppv国产精品久久| 91精品国产综合久久精品| 国产精彩精品视频| 99er精品视频| 国产精品一区二区不卡视频| 国产极品嫩模在线观看91精品| 欧美综合激情网| 欧美在线观看天堂一区二区三区| 欧美精品在线一区二区三区| 日本在线观看大片免费视频| 欧美成人午夜影院| 欧美特黄一级| 久久九九国产视频| 久久尤物电影视频在线观看| 久久国产精品久久| 国产亚洲在线| 久久精品无码一区二区日韩av| 中文字幕成人网| 91久久久久久| 激情综合久久| 91视频 - 88av| 欧美日韩一区二区不卡| 日韩美香港a一级毛片| 国产综合视频在线观看| 亚洲一区二区三区四区五区午夜 | 成人午夜在线观看视频| 99久久精品费精品国产一区二区| 久久久久久国产免费| 久久av日韩| 中文字幕在线精品| 成人日韩在线观看| 久久av在线看| 免费在线看一区| 国模私拍视频| 中文字幕亚洲区| 四季久久免费一区二区三区四区| 一级精品视频在线观看宜春院 | 欧美一区二区福利视频| 成全电影播放在线观看国语| 狠狠操狠狠色综合网| 91社区在线高清| 日韩乱码在线视频| 亚洲三级av| 国产精品极品美女在线观看免费 | 久久久亚洲影院你懂的| 黄色不卡一区| 久久国产精品免费一区| 精品在线观看视频| 黄色三级视频在线| 好吊成人免视频| 成人性生交大片免费看网站| 久久精品视频中文字幕| 91欧美大片| 亚洲精品天堂成人片av在线播放| 亚洲美女屁股眼交| 青青在线视频| 国语自产偷拍精品视频偷| 亚洲国产一成人久久精品| 中文字幕中文字幕在线中心一区| 国产精品久久久爽爽爽麻豆色哟哟 | 美女一区二区在线观看| 久久免费视频观看| 菠萝蜜一区二区| 成人久久久久久| 精品999日本| 69堂免费视频| 亚洲一区精品在线| 网友自拍视频在线| 久久精品国产一区| 99国产精品一区二区| 欧美污视频久久久| 91蝌蚪porny| 亚洲激情文学| 欧美老少做受xxxx高潮| 综合激情网站| 北条麻妃69av| 欧美三区免费完整视频在线观看| 88xx成人永久免费观看| 日韩美女在线看| 日日夜夜精品免费视频| www插插插无码视频网站| 欧美亚洲国产一卡| 高清一区二区| 久久国产精品一区二区三区四区| 91网站在线播放| 成年人视频网站在线| 日韩中文字幕免费视频| 欧美在线黄色| 岳毛多又紧做起爽| 亚洲第一区第二区| 国产欧美高清视频在线| 黄色www在线观看| 香蕉成人伊视频在线观看| 偷拍视频一区二区三区| 国产女精品视频网站免费| 久久99久久精品| 一本到av在线| 91精品国产免费久久综合| 欧美亚洲在线日韩| 国产视频在线观看网站| 黑人精品xxx一区一二区| 久久精品国产福利| 美女主播视频一区| 国产精品国产自产拍高清av| 午夜dj在线观看高清视频完整版| 91国产中文字幕| 麻豆freexxxx性91精品| 国产福利电影网| 在线播放国产一区中文字幕剧情欧美| 99热国内精品| 91国产精品视频在线观看| 日韩精品极品在线观看| 午夜性色一区二区三区免费视频 | 一本久道久久综合婷婷鲸鱼| 国产免费999| 日韩久久精品电影| 一区在线免费| 天堂av在线7| 日本a级片电影一区二区| 粉嫩久久99精品久久久久久夜| 波多野结衣在线网站| 国产精品久久久久久久7电影| 处破女av一区二区| 亚洲婷婷噜噜| 国产专区一区二区三区| 中文字幕中文在线不卡住| bbw在线视频| 久久精品日韩精品| 午夜亚洲国产au精品一区二区| 国产精品22p| 少妇高潮喷水久久久久久久久久| 91超碰这里只有精品国产| 五月天综合网站| 日本午夜视频| 欧美成aaa人片在线观看蜜臀| 成人精品高清在线| 高清精品在线| 日韩精品在在线一区二区中文| 欧美视频在线视频| 欧美美女视频| 电影天堂爱爱爱爱| 91精品91久久久久久| 欧美韩国日本一区| 人人九九精品视频| 欧美做暖暖视频| 久久精品夜夜夜夜夜久久| 99久久国产综合精品色伊| 欧美电影在线观看网站| 国产婷婷一区二区三区| 亚洲欧美资源在线| 国产精品自拍一区| 亚洲福利影视| 草草久视频在线观看电影资源| 久久久免费精品| 亚洲乱码中文字幕综合| 亚洲国产欧美日韩在线观看第一区 | 国产毛片视频| 国自在线精品视频| 国产精品乱码久久久久久| 久久视频免费| 啊啊啊啊啊好爽| 成人做爰www免费看视频网站| 欧美性猛交xxxx乱大交极品| 欧美精品尤物在线观看| 在线观看av网站| 国产乱码精品一区二区三区中文 | 国产一区二区区别| 天堂影视av| 成人两性免费视频| 亚洲视频香蕉人妖| 亚洲大胆在线| av免费不卡国产观看| 蜜臀在线免费观看| 久久色精品视频| 一区二区三区中文字幕电影| 68国产成人综合久久精品| 久久日韩视频| 亚洲精品天堂成人片av在线播放 | 国产在线高清视频| 三年中国中文在线观看免费播放| 国产亚洲欧美另类中文| 94色蜜桃网一区二区三区| 天堂日韩电影| 91大神xh98hx在线播放| av影院在线播放| 全亚洲最色的网站在线观看| 黑人精品xxx一区一二区| 免费在线观看成人av| 二吊插入一穴一区二区| 国产情侣av自拍| 免费成人深夜夜行视频| y97精品国产97久久久久久| 亚洲色图一区二区三区| 久久99伊人| 成人福利一区|