Makefile

            <span

class=“creativecommons”>

            <a

href=“http://creativecommons.org/licenses/by-sa/4.0/”
rel=“license”>

                </a>
            版权声明:本文为博主原创文章,遵循<a

href=“http://creativecommons.org/licenses/by-sa/4.0/”
target="_blank" rel=“noopener”> CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

           <div

class=“article-source-link2222”>

                本文链接:<a

href=“https://blog.csdn.net/hhwhg123/article/details/99708327”>https://blog.csdn.net/hhwhg123/article/details/99708327

            </div>
                </div>
            <div

class=“htmledit_views” id=“content_views”>

目录

makefile建立

1.最简单的makefile

2.makefile进阶

3.makefile优化

(1)常用的变量名(约定俗成的):

(2)一些特殊字符

(3)特殊变量

(4)makefile内置函数

代码


makefile三要素:目标;依赖;命令 

makefile执行原理:从上到下建立依赖关系;从下到上执行

makefile建立

通过实现一个加减乘除方法作为例子,文件结构如图所示

src中文件如图所示:

然后编写src中Makefile文件

1.最简单的makefile


 
 
  1. app:add.c jian.c cheng.c chu.c main.c
  2. gcc add.c jian.c cheng.c chu.c main.c -I../include -o app

2.makefile进阶


 
 
  1. app:add.o jian.o cheng.o chu.o main.o
  2. gcc add.o jian.o cheng.o chu.o main.o -o app
  3. add.o:add.c
  4. gcc -c add.c -I../include
  5. jian.o:jian.c
  6. gcc -c jian.c -I../include
  7. cheng.o:cheng.c
  8. gcc -c cheng.c -I../include
  9. chu.o:chu.c
  10. gcc -c chu.c -I../include
  11. main.o:main.c
  12. gcc -c main.c -I../include

3.makefile优化

(1)常用的变量名(约定俗成的):

CC:表示c编译器版本

CFLAGS:表示编译时参数

CPPFLAGS:表示预处理参数

CXX:表示C++编译器版本

CXXFLAGS:表示c++编译时参数

LDFLAGS:表示库参数库选项

INCLUDE:表示头文件目录

TARGET:表示目标名

RM:删除选项

(2)一些特殊字符

$(变量):对变量取值

@:只显示命令结果,忽略命令本身

-:如果当前命令出错,忽略错误,继续执行

%:通配符,通配符是以遍历的方式实现的

(3)特殊变量

用于当前目标:

$@:代表目标

$<:代表依赖中的第一个

$^:代表所有依赖

(4)makefile内置函数

wildcard:按照指定格式获取当前目录下的所有文件名

例:SOURCEFILE=$(wildcard *.c):获取.c后缀的所有文件并返回赋值给SOURCEFILE

patsubst:根据指定的格式进行替换(字符串替换)

例:DEFFILE=$(patsubst %.c,%.o,$(SOURCEFILE))

代码


 
 
  1. .PHONY:clean #伪目标
  2. CC=gcc
  3. INCLUDE=-I../include
  4. CFLAGS=-c -g -Wall $(INCLUDE) #-g增加调试信息 -Wall严格编译
  5. CPPFLAGS=-E -D    #-E头文件展开 -D编译时定义宏
  6. CXX=g++
  7. LDFLAGS=-L../lib -lpthread  #这只是个例子,并没用到该库。-l库名
  8. TARGET=app
  9. RM=rm -rf
  10. SRCFILE=$(wildcard *.c)
  11. DEFFILE=$(patsubst %.c,%.o,$(SRCFILE))
  12. $(TARGET):$(DEFFILE)
  13.     $(CC) $^ -o $(TARGET)
  14. %.o:%.c
  15.     $(CC) $(CFLAGS) $<
  16. clean:
  17.     -$(RM) $(TARGET) $(DEFFILE)
  18. install:
  19.     sudo cp $(TARGET) /usr/bin
  20. uninstall:
  21.     sudo $(RM) /usr/bin/$(TARGET)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值