1. 程式人生 > >Linux基礎(一)——遞迴make

Linux基礎(一)——遞迴make

1、遞迴make    
   
    make命令有遞迴呼叫的功能,它可以遞迴呼叫子目錄中的Makefile。例如在當前目錄下有一個Makefile,在當前目錄下有一個子目錄hello並且其中有一個Makefile。當前目錄下有一個檔案man.c如下:

void main()
{
    hello();
}


 當前目錄下的Makefile檔案內容如下

CC = gcc
CFLAGS = -O2
TARGET = hello
export OBJSDIR = ${pwd}/objs       #生成當前目錄objs的路徑,並能供外部呼叫

$(TARGET) :  $(OBJSDIROBJSDIR) 
        $(MAKE) -C hello
        $(CC) -w -o $(TARGET) $(OBJSDIR)/*.o

main.o:%.o:%.c

       $(CC) -w -c $< -o $(OBJSDIR)/
[email protected]
$(CFLAGS) -Ihello $(OBJSDIR):        mkdir $(OBJSDIR) clean:       - rm -r $(OBJSDIR)       #如果rm前面沒有-,當執行一次make clean後再次執行make clean會出錯        rm -f $(TARGET)        rm -f *~ 

資料夾hello下有hello.h、hello.c與Makefile
/****************hello.h檔案內容**********************/

 #include<stdio.h>


 /****************hello.c檔案內容**********************/

void hello()

{

printf("Hello World!\n");

} 


/****************Makefile檔案內容**********************/

OBJS = hello.o


all:$(OBJS)

       $(OBJS):%.o:%.c

       $(CC) -w -c $< -o $(OBJSDIR)/
[email protected]
$(CFLAGS) clean:         rm -f $(OBJS)        rm -f *~ 

建立好上述的資料夾與檔案之後進入執行make,結果如下:

[email protected]:~/Desktop/study/main$ make

mkdir /home/liwei/Desktop/study/main/objs

gcc -w -c main.c -o /home/liwei/Desktop/study/main/objs/main.o -O2 -Ihello

make -C hello

make[1]: Entering directory '/home/liwei/Desktop/study/main/hello'

cc -w -c hello.c -o /home/liwei/Desktop/study/main/objs/hello.o 

make[1]: Leaving directory '/home/liwei/Desktop/study/main/hello'

gcc -w -o hello_world /home/liwei/Desktop/study/main/objs/*.o

[email protected]:~/Desktop/study/main$