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)/$@ $(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)/$@ $(CFLAGS)


clean: 

       rm -f $(OBJS)
       rm -f *~ 

建立好上述的文件夹与文件之后进入执行make,结果如下:

liwei@ubuntu:~/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

liwei@ubuntu:~/Desktop/study/main$  

猜你喜欢

转载自blog.csdn.net/lixiangsheng2012/article/details/83421130
今日推荐