欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
(MAKE)手動(dòng)建立makefile簡(jiǎn)單實(shí)例解析 - vim+gcc+gdb+make -...
(MAKE)手動(dòng)建立makefile簡(jiǎn)單實(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 <stdio.h>
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 <stdio.h>
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和Makefile。GNU make是一個(gè)工程管理器,它可以管理較多的文件。我所使用的RedHat 9.0的make版本為GNU Make version 3.79.1。使用make的最大好處就是實(shí)現了“自動(dòng)化編譯”。如果有一個(gè)上百個(gè)文件的代碼構成的項目,其中一個(gè)或者幾個(gè)文件進(jìn)行了修改,make就能夠自動(dòng)識別更新了的文件代碼,不需要輸入冗長(cháng)的命令行就可以完成最后的編譯工作。make執行時(shí),自動(dòng)尋找Makefile(makefile)文件,然后執行編譯工作。所以我們需要編寫(xiě)Makefile文件,這樣可以提高實(shí)際項目的工作效率。
在一個(gè)Makefile中通常包含下面內容:
1、需要由make工具創(chuàng )建的目標體(target),通常是目標文件或可執行文件。
2、要創(chuàng )建的目標體所依賴(lài)的文件(dependency_file)。
3、創(chuàng )建每個(gè)目標體時(shí)需要運行的命令(command)。
格式如下:
target:dependency_files
<TAB>command
target:規則的目標。通常是程序中間或者最后需要生成的文件名,可以是.o文件、也可以是最后的可執行程序的文件名。另外,目標也可以是一個(gè)make執行的動(dòng)作的名稱(chēng),如目標“clean”,這樣的目標稱(chēng)為“偽目標”。
dependency_files:規則的依賴(lài)。生成規則目標所需要的文件名列表。通常一個(gè)目標依賴(lài)于一個(gè)或者多個(gè)文件。
command:規則的命令行。是make程序所有執行的動(dòng)作(任意的shell命令或者可在shell下執行的程序)。一個(gè)規則可以有多個(gè)命令行,每一條命令占一行。注意:每一個(gè)命令行必須以[Tab]字符開(kāi)始,[Tab]字符告訴make此行是一個(gè)命令行。make按照命令完成相應的動(dòng)作。這也是書(shū)寫(xiě)Makefile中容易產(chǎn)生,而且比較隱蔽的錯誤。命令就是在任何一個(gè)目標的依賴(lài)文件發(fā)生變化后重建目標的動(dòng)作描述。一個(gè)目標可以沒(méi)有依賴(lài)而只有動(dòng)作(指定的命令)。比如Makefile中的目標“clean”,此目標沒(méi)有依賴(lài),只有命令。它所指定的命令用來(lái)刪除make過(guò)程產(chǎn)生的中間文件(清理工作)。
在Makefile中“規則”就是描述在什么情況下、如何重建規則的目標文件,通常規則中包括了目標的依賴(lài)關(guān)系(目標的依賴(lài)文件)和重建目標的命令。make執行重建目標的命令,來(lái)創(chuàng )建或者重建規則的目標(此目標文件也可以是觸發(fā)這個(gè)規則的上一個(gè)規則中的依賴(lài)文件)。規則包含了目標和依賴(lài)的關(guān)系以及更新目標所要求的命令。
Makefile中可以包含除規則以外的部分。一個(gè)最簡(jiǎn)單的Makefile可能只包含規則描述。規則在有些Makefile中可能看起來(lái)非常復雜,但是無(wú)論規則的書(shū)寫(xiě)是多么的復雜,它都符合規則的基本格式。
下面就可以寫(xiě)出第一個(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,執行顯示:
gcc -c main.c
gcc -c mytool1.c
gcc -c mytool2.c
gcc -o main main.o mytool1.o mytool2.o
執行結果如下:
[armlinux@lqm makefile-easy]$ ./main
This is mytool1 print : hello mytool1!
This is mytool2 print : hello mytool2!
這只是最為初級的Makefile,現在來(lái)對這個(gè)Makefile進(jìn)行改進(jìn)。
改進(jìn)一:使用變量
一般在書(shū)寫(xiě)Makefile時(shí),各部分變量引用的格式如下:
1. make變量(Makefile中定義的或者是make的環(huán)境變量)的引用使用“$(VAR)”格式,無(wú)論“VAR”是單字符變量名還是多字符變量名。
2. 出現在規則命令行中shell變量(一般為執行命令過(guò)程中的臨時(shí)變量,它不屬于Makefile變量,而是一個(gè)shell變量)引用使用shell的“$tmp”格式。
3. 對出現在命令行中的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)推導
讓make自動(dòng)推導,只要make看到一個(gè).o文件,它就會(huì )自動(dòng)的把對應的.c文件加到依賴(lài)文件中,并且gcc -c .c也會(huì )被推導出來(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)變量($^ $< $@)的應用
Makefile 有三個(gè)非常有用的變量,分別是$@、$^、$<。代表的意義分別是:
$@--目標文件,
$^--所有的依賴(lài)文件,
$<--第一個(gè)依賴(lài)文件。
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)
這些是最為初級的知識,現在至少可以減少編譯時(shí)的工作量。細節方面的東西還需要在以后的工作和學(xué)習中不斷的總結,不斷的深化理解??梢?參考GNU Make手冊,這里講解的比較全面。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Makefile Note
gcc Makefile 入門(mén)
!!!使用autotools建立Makefile
linux下的C語(yǔ)言開(kāi)發(fā)(makefile編寫(xiě)詳解)
一個(gè)簡(jiǎn)單的makefile示例及其注釋
makefile自動(dòng)生成依賴(lài)關(guān)系
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久