makefile

原创

makefile

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/hhwhg123/article/details/99708327
            </div>
                                                <!--一个博主专栏付费入口-->
         
         <!--一个博主专栏付费入口结束-->
        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-4a3473df85.css">
                                    <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-4a3473df85.css">
            <div class="htmledit_views" id="content_views">
                                        <p id="main-toc"><strong>目录</strong></p>

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)

 

文章最后发布于: 2019-08-18 21:47:30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值