zoukankan      html  css  js  c++  java
  • makefile自动编译

    1.格式: 

    目标:依赖

      规则    规则前有一个tab键 ,缺少tab键出错,使用空格替代也不可以

    (1). 例子: 编写makefile 编译 main.c ,fun.c , fun.h

    test:main.o fun.o
        gcc main.o fun.o -o test
    
    fun.o:fun.c
        gcc -c fun.c -o fun.o
    main.o:main.c
        gcc -c main.c -o main.o
    
    .PHONY  #此行是防止,当前编译的目录下存在clean文件,不然报错
    clean:
        rm *.o test
    

    (2).  使用变量

    # 使用变量代替比较长的编译工具名
    CC=gcc
    #使用变量代替较多的参数
    CFLAGS=-c -Wall
    
    test:main.o fun.o
        &(CC) main.o fun.o -o test
    
    main.o:main.c
        $(CC) $(CFLAGS) main.c -o main.o
    #    gcc -c main.c -o main.o -Wall    #不使用变量情况,使用变量时 用 $ 符取变量值
    
    fun.o:fun.c
        &(CC) $(CFLAGS) fun.c -o fun.o
    
    .PNOHY
    clean:
        rm *.o test
    

      

    (3). 自动变量
    $*    不包含扩展名的目标文件名称
    $+    所有的依赖文件,以空格分开,并且以出现的先后为序,可能包含重复的依赖文件
    $<    第一个依赖文件的名称
    $?     所有时间戳比目标文件晚的依赖文件,并以空格隔开
    $@   目标文件的完整名称
    $^     所有不重复的依赖文件,以空格隔开

    CC=gcc
    CFLAGS=-c -Wall
    
    test:main.o fun.o
        $(CC) $^ -o $@  # $^ 所有不重复的依赖文件,以空格隔开
    
    main.o:main.c
        $(CC) $(CFLAGS) $< -o $@  # $< 第一个依赖文件的名称,$@ 目标文件的完整名称
    fun.o:fun.c
        $(CC) $(CFLAGS) fun.c -o fun.o
    
    .PHONY
    clean:
        rm *.o test
    

      

    (4).  隐含规则

    CC=gcc
    CFLAGS=-c -Wall
    
    # 隐含规则,注意目标文件必须是一个已存在的文件,下一行的规则没有,但需要tab键
    main:mian.o fun.o   # 此处目标不能再写test了,必须是已存在的文件名
        
    
    .PHONY
    clean:
        rm *.o main
    
  • 相关阅读:
    codeforces 659F F. Polycarp and Hay(并查集+bfs)
    codeforces 659B B. Qualifying Contest(水题+sort)
    codeforces 659E E. New Reform(图论)
    codeforces 659D D. Bicycle Race(水题)
    sql_mode值的含义
    MySQL Query Cache
    Orchestrator安装
    脚本VIP更改为keepalive
    MHA软件下载地址
    MySQL中的事件调度器EVENT
  • 原文地址:https://www.cnblogs.com/electronic/p/11094900.html
Copyright © 2011-2022 走看看