• linux开发工具之Makefile(上)


    一 make工具:
    利用make工具可以自动完成编译工作。这些工作包括:
    如果仅修改了某几个源文件,则指重新编译这几个源文件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化开发工作,避免不必要的重新编译

    二 make工具是通过一个称为Makefile的文件来完成并维护编译工作的。Makefile文件描述了整个工程的编译、连接等规则。

    三 Makefile基本规则
    TARGET...(目标):DEPENDENCES...(依赖文件)
        COMMAND
        ...
    目标(target)程序产生的文件:如可执行文件和目标文件;目标文件也可以是要执行的动作,如clean,也称为伪目标
    依赖(DEPENDENCEs)是用来产生目标的输入文件列表。一个目标通常依赖于多个文件。

    命令(COMMAND)是make执行的动作(命令是shell命令或者可在shell下执行的程序)注意:每个命令行的起始字符必须是TAB
    如果DEPENDENCES中有一个或多个文件更新,就执行COMMAND命令来更新。

    一个简单的Makefile

    .PHONY:clean
    main:main.o add.o sub.o
        gcc -Wall -g main.o add.o sub.o -o main
    mian.o:mian.c
        gcc -Wall -g -c main.c -o main.o
    add.o:...
        ...
    sub.o:...
        ...
    clean:
        rm -f main main.o add.o sub.o


    clean 伪目标不是真正要生成的目标,没有依赖列表。加上一个.PHONY:clean显示指定clean为伪目标

    四:Makefile自动化变量。去除一些重复内容


    $@: 规则的目标文件名
    $<: 规则的第一个依赖文件名
    $^: 规则的所有依赖文件列表

    .PHONY:clean
    OBJECTS=main.o add.o sub.o
    main: $(OBJECTS)
        gcc -Wall -g $^ -o $@
    mian.o: mian.c
        gcc -Wall -g  -c $< -o $@
    add.o: ...
        ...
    sub.o: ...
        ...
    clean:
        rm -f main $(OBJECTS)

        
        
    再进一步改进

    .PHONY:clean
    CC=gcc
    CFLAGS=-Wall -g
    OBJECTS=main.o add.o sub.o
    main:$(OBJECTS)
        $(CC)  $(CFLAGS)  $^  -o  $@
    mian.o:mian.c
        $(CC)  $(CFLAGS)  -c  $<  -o  $@
    add.o:...
        ...
    sub.o:...
        ...
    clean:
        rm -f main $(OBJECTS)

        

    五、Makefile编译多个可执行文件

    目录下有01test.c   02test.c

    01test.c要生成01test   ......

    %.o:%.c   等价于   .c.o:
    .PHONY:clean all              #all也是伪目标,要生成all就要生成BIN
    CC=gcc
    CFLAGS=-Wall -g
    BIN:01test 02test
    all:$(BIN)
    %.o:%.c                                #若不写规则,编译器会自动推导,将同名.c文件生成.o文件。再将.o文件自动推导生成目标文件(也可以自己生动添加规则) 01test: 01test.o    gcc  -Wall -g $^  -o $@
        $(CC)  $(CFLAGS) -c $< -o $@
    clean:
        rm -f  *.o  $(BIN)



  • 相关阅读:
    jQuery中获取元素的属性方法attr()简单用法
    【经验】angularjs 实现带查找筛选功能的select下拉框
    【经验】Angularjs 中使用 layDate 日期控件
    在 VPS 上一键安装KMS服务脚本
    Windows 使用 TCPing 工具来获取 TCP延迟、端口通顺情况、已禁Ping服务器的延迟
    Linux 初级教程:初步进入 Linux 世界
    Debian/Ubuntu TCP拥塞控制技术 ——TCP-BBR 一键安装脚本
    Linux 下 iptables 配置详解
    在 Ubuntu 上安装 LaTeX
    代码审计学习之反射型XSS
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/8228374.html
Copyright © 2020-2023  润新知