make与makefile

1.make
    gcc - 编译器
    make - linux自带的构建器,make工作在gcc之前
        构建的规则在makefile文件中
2.makefile文件的命名
    makefile/Makefile
3.makefile中的规则
    3.1 三部分:目标,依赖,命令
        基本结构:
            目标:依赖
            (tab缩进)命令
    3.2 在实际项目开发中的两个版本    
        版本一:效率非常低
            app:a.c b.c c.c
                gcc a.c b.c c.c -oapp
        版本二:效率很高,但是沉余,判断依赖是否存在,判断是否需要跟新
            app:main.o sub.o add.o mul.o
                gcc main.o add.o sub.o mul.o -oapp
            add.o:add.c
                gcc add.c -c
            sub.o:sub.c
                gcc sub.c -c     
            mul.o:mul.c
                gcc mul.c -c     
            main.o:main.c
                gcc main.c -c         
        版本三:可移植性不好
            自定义变量:obj=a.o b.o c.o
            变量的取值:aa=$(obj)
            makefile自带的变量
                CppFLAGS:预处理的时候需要加的参数
                CC:
            makefile自动变量:
                $@:规则中的目标
                $<:规则中的第一个依赖
                $>:规则中的最后一个依赖
            版本三:实例
                obj = main.o sub.o add.o mul.o
                target = app    
                $(target):$(obj)
                    gcc $(obj) -o $(target)
                %.o:%.c    
                    gcc -c $< -o $@
        版本四:
            几个函数:
                wildcard:查找指定目录下指定类型的文件
                    src = $(wildcard ./*.c)
                patsubst:匹配替换
                    obj = $(patsubst %.c,%.o,$(src))
            版本四实例:
                src = $(wildcard ./*.c)
                obj = $(patsubst %.c,%.o,$(src))
                target = app    
                $(target):$(obj)
                    gcc $(obj) -o $(target)
                %.o:%.c    
                    gcc -c $< -o $@
        版本五:项目清理
            .PHONY:clean  //这个一般都要加上
            clean:
                rm $(obj) $(target) -f
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                

猜你喜欢

转载自blog.csdn.net/liujun5319/article/details/82009377