• Linux make语法


    make是一种控制编译或者重复编译软件的工具。
    make可以自动关键软件的编译内容、方式和时机,从而使程序员把更多的精力集中在编写代码上。
    make主要的机制是在命令行键入make命令,make会自动执行当前目录下的makefile文件
    makefile规则
    标号:依赖项
    (tab键)命令代码
    (tab键)命令代码
    --每个命令代码的第一个字符必须是tab键,而不是空格键,不然make会报错。
    命令行直接键入make,make默认只会执行第一个标号的命令代码

    上图命令行详解
    start:hello.o--表示执行start标号下的命令行需要hello.o文件,
    如果当前目录下有hello.o文件,那么会直接执行start标号下的命令行;
    如果当前目录下没有hello.o文件,那么make会自动寻找生成hello.o文件的标号,找到hello.o标号,
    执行hello.o标号下的命令行,然后执行start标号下的命令行。
    如果需要执行指定标号的命令行,必须使用make参数
    --make 需要执行的标号
    --例如:make clean

    在make语法中"@"表示不打印该命令语句,只打印命令执行结果
    --例如@echo "-OK--"   只会打印-OK---

    为了简化编辑和维护makefile,可以在makefile中使用变量。
    --varname=some_text
    把变量用括号扩起来,前面加上$符号就可以引用该变量的值
    --$(varname)
    按照惯例makefile的变量都是大写

    $(SRCS:.c=.o)意思是将SRCS变量中的.c替换成.o

    在makefile中用"#"来添加注释
    make中的依赖声明
    .SUFFIXES:.c (一个空格) .o
    --这表明.o文件依赖于.c文件,.c和.o文件之间存在着依赖关系
    --强调:使用.SUFFIXES来表示两个文件的依赖关系,必须两个文件的文件名一致,只是文件类型不同才可以适应.SUFFIXES
    
    在make语句start:$(OBJS)中,表明依赖项是.o文件,根据.SUFFIXES声明,.o文件依赖于.c文件,找到".c.o"标签,执行该标签下的命令
    --$@表示生成的目标文件
    --$<表示生成目标的源文件
    --$^表示依赖项
    --$@、$<都是针对于.SUFFIXES声明而言的,在.SUFFIXES声明定义的目标文件才用$@表示,源文件才用$<表示。

    make中多个.c文件联合编译
    --SRCS=hello.c
      (tab键)add.c
    --这表示有两个源文件,
    --OBJS=$(SRCS:.c=.o) 此时也会对应的生成两个.o文件
    --start:$(OBJS)这时候会发现两个依赖项,所以会执行".c.o"标签两次,从而生成两个.o文件。

    make编译多文件时,会以.c文件的时间和.o文件的时间做对比,只编译修改过的.c文件,提高编译效率。
    .PHONY:clean
    
    WORKDIR=.
    
    VPATH = ./src
    
    
    LIBOBJS=  socketclient.o itcastlog.o
    OBJS= demo01_testplatform.o
    
    LIB1 = libmysocket.so
    EXE1 = mysocketexe
    CC = gcc
    CFLGS= -Wall -g -I$(WORKDIR)/inc/
    LIBFLAG = -L$(HOME)/lib
    
    all: $(LIB1) $(EXE1)
    
    
    $(LIB1):$(LIBOBJS)
        $(CC) -shared -fPIC $^ -o $@ 
        cp  $(LIB1) $(HOME)/lib
        mv  $(LIB1) ./lib
        
    
    $(EXE1):$(OBJS)
        $(CC)  $^ $(LIBFLAG) -lmysocket  -o $@
    
    
    .c.o:
        $(CC) $(CFLGS) -c $< -o $@  -shared -fPIC
    clean:
        rm -rf $(BIN) *.o $(HOME)/lib/$(LIB1) ./$(LIB1) 
        
  • 相关阅读:
    Ubuntu 杂音 alsa*
    安装YouCompleteMe
    vimrc
    Linux Windows 修改键盘映射
    VMware Workstation+Linux+Xshell+Xftp+MySQL+SQLyog 配置
    leetcode Merge Intervals
    leetcode Remove Duplicates from Sorted Array II
    用栈实现二叉树的非递归中序遍历
    nth_element 测试程序
    Windows 程序设计
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5770869.html
Copyright © 2020-2023  润新知