码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • makefile的编写:由浅入深


    文章目录

      • 准备文件
      • Makefile版本一
      • Makefile版本二
      • Makefile版本三
      • Makefile版本四
      • Makefile版本五

    准备文件

    // fun1.c
    #include 
    void fun1()
    {
        printf("this is fun1\n");	
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    // fun2.c
    #include 
    void fun2()
    {
        printf("this is fun2\n");	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    //head.h
    void fun1();
    void fun2();
    int sum(int len);
    
    • 1
    • 2
    • 3
    • 4
    //sum.c
    #include 
    
    int sum(int len)
    {
    	int i = 0;
    	int sum = 0;
    	for(i=0; i<len; i++)
    	{
    		sum += i;
    	}
    
    	return sum;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    //main.c
    #include 
    #include 
    #include 
    #include 
    #include 
    #include "head.h"
    
    int main(int argc, char *argv[])
    {
        printf("this is main!\n");
    	int i = 0;
    	for(i=0; i<argc; i++)
    	{
    		printf("[%d]:[%s]\n", i, argv[i]);
    	}
    
        fun1();
        fun2();
    
    	printf("sum(10)==[%d]\n", sum(10));
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    Makefile版本一

    在这里插入图片描述

    main: main.c fun1.c fun2.c sum.c
    	gcc -o main main.c fun1.c fun2.c sum.c
    
    • 1
    • 2

    Makefile版本二

    在这里插入图片描述
    在这里插入图片描述

    main:main.o fun1.o fun2.o sum.o
    	gcc -o main  main.o fun1.o fun2.o sum.o
    
    main.o: main.c
    	gcc -c main.c -I./
    
    fun1.o: fun1.c
    	gcc -c fun1.c
    	
    fun2.o: fun2.c
    	gcc -c fun2.c
    
    sum.o: sum.c
    	gcc -c sum.c
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    Makefile版本三

    在这里插入图片描述在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    target = main
    objects = main.o fun1.o fun2.o sum.o
    CC = gcc
    CPPFLAGS = -I./
    
    #这里的$(objects)不能替换成$^,因为此处是条件,不是命令
    $(target): $(objects) 
    	$(CC) -o $@ $^
    
    %.o: %.c
    	$(CC) -c $< $(CPPFLAGS)
    
    ###########################################
    
    #main.o: main.c
    #	$(CC) -c $< $(CPPFLAGS)
    
    #fun1.o: fun1.c
    #	$(CC) -c $<
    	
    #fun2.o: fun2.c
    #	$(CC) -c $<
    
    #sum.o: sum.c
    #	$(CC) -c $<
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    Makefile版本四

    在这里插入图片描述

    target = main
    
    src = $(wildcard *.c)
    objects = $(patsubst %.c, %.o, $(src))
    #objects = main.o fun1.o fun2.o sum.o
    
    CC = gcc
    CPPFLAGS = -I./
    
    #这里的$(objects)不能替换成$^,因为此处是条件,不是命令
    $(target): $(objects) 
    	$(CC) -o $@ $^
    
    %.o: %.c
    	$(CC) -c $< $(CPPFLAGS)
    
    ###########################################
    
    #main.o: main.c
    #	$(CC) -c $< $(CPPFLAGS)
    
    #fun1.o: fun1.c
    #	$(CC) -c $<
    	
    #fun2.o: fun2.c
    #	$(CC) -c $<
    
    #sum.o: sum.c
    #	$(CC) -c $<
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    Makefile版本五

    在这里插入图片描述

    target = main
    src = $(wildcard *.c)
    objects = $(patsubst %.c, %.o, $(src))
    CC = gcc
    CPPFLAGS = -I./
    
    $(target): $(objects) 
    	$(CC) -o $@ $^
    
    %.o: %.c
    	$(CC) -c $< $(CPPFLAGS)
    
    #clean和前面的命令没有依赖关系
    .PHONY: clean
    clean:
    	rm -f $(objects) $(target)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

  • 相关阅读:
    MyBatis的xml里#{}的参数为null报错、将null作为参数传递报错问题
    线程安全问题及关键字synchronized,volatile
    MacBookPro更新到13后vagrant无法启动virtualBox
    【PAT甲级 - C++题解】1137 Final Grading
    42.(后端)更新用户信息
    【JVM】垃圾回收机制中,对象进入老年代的触发条件
    基于vue3+pinia2仿ChatGPT聊天实例|vite4.x仿chatgpt界面
    iTOP3588开发板编译Android内核方法一
    “算法的中间状态:混沌与秩序的微妙平衡“论文基本格式
    lintcode 1832 · 最小步数【BFS 中等】
  • 原文地址:https://blog.csdn.net/jiangchufeng123/article/details/132844191
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号