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$