makefile简单学习(一)
第一层 显式规则
目标:依赖
[tab] 指令
伪目标:.PHONY:
递归规则
hello : hello.o
gcc hello.o -o hello
hello.o : hello.s
gcc -c hello.s -o hello.o
hello.s : hello.i
gcc -S hello.i -o hello.s
hello.i : hello.i
gcc -E hello.c -o hello.i
.PHONY:
clearall:
rm -rf hello.o hello.s hello.i hello
clear:
rm -rf hello.o hello.s hello hello.i
多个文件的makefile
目标:依赖
[tab] gcc
test:circle.o cube.o main.o
gcc circle.o cube.o main.o -o test
circle.o:circle.c
gcc -c circle.c -o circle.o
cube.o : cube.c
gcc -c cube.c -o circle.o
main.o : main.c
gcc -c main.c -o main.o
.PHONY:
clearall:
rm -rf circle.o cube.o main.o test
clear:
rm -rf circle.o cube.o main.o
变量 + 隐藏规则
=
替换(赋值)+=
追加:=
恒等
%.c,%.o
任意的.c文件
*.c,.c
所有的.c 文件
$
符号表示取变量
TAR = test #目标文件
OBJ = circle.o cube.o main.o
CC := gcc
CFLAG = -o -Wall
$(TAR):$(OBJ)
$(CC) $(OBJ) -o $(TAR);
# 依赖怎么写?
(%.o):%.c
$(CC) -c %.c -o -Wall %.o
.PHONY:
clearall:
rm -rf $(TAR) $(OBJ)
clear:
rm -rf $(OBJ)
通配符
$^
所有依赖文件
$@
所有目标文件
$<
第一个目标文件
实践
//注意是#ifndef!!! cube.h文件
#ifndef CUBE_H
#define CUBE_H
#include<stdio.h>
void cube();
#endif
//cube.c
#include "cube.h"
void cube()
{
printf("cube");
}
//circle.h
#ifndef Circle_H
#define Circle_H
#include<stdio.h>
void circle();
#endif
//circle.c
#include<stdio.h>
#include "circle.h"
void circle()
{
printf("s= PI * r^2\n");
printf("c= 2 * PI * r\n");
}
//main.c
include "circle.h"
#include "cube.h"
int main()
{
cube();
circle();
return 0;
}
执行make
(base) matytan@matytandeMacBook-Pro maketest % make
gcc -c -o circle.o circle.c
gcc -c -o cube.o cube.c
gcc -c -o main.o main.c
gcc circle.o cube.o main.o -o test ;
(base) matytan@matytandeMacBook-Pro maketest % ./test
makefile简单学习(一)的更多相关文章
- makefile简单学习
前言 在C语言中,我们需要将源代码生成可执行的程序.这里面其实要经过非常多的步骤.参看下图: 这中间主要通过make命令,读取一种名为“makefile”或“Makefile”的文件来实现软件的自动化 ...
- Makefile的学习笔记
Makefile的学习笔记 标签: makefilewildcard扩展includeshellfile 2012-01-03 00:07 9586人阅读 评论(2) 收藏 举报 分类: Linux ...
- 运用Autoconf和Automake生成Makefile的学习之路
作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的M ...
- Linux yum的配置 , python环境管理, nginx搭建简单学习
Linux yum的配置 , python环境管理, nginx搭建简单学习 一丶配置yum的数据仓库 ### yum 工具, 方便,自行解决软件之间的依赖关系. # 配置yum源仓库 (可以使用,清 ...
- Gcc的Makefile简单使用
Gcc的Makefile简单使用http://blog.chinaunix.net/uid-9330295-id-2425867.html
- Log4j简单学习笔记
log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...
- Makefile基础学习
Makefile基础学习 理论知识 makefile关系到了整个工程的编译规则.一个工程中的源文件不计其数,并且按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文 ...
- shiro简单学习的简单总结
权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...
- CentOS 简单学习 firewalld的使用
1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...
随机推荐
- APScheduler(python 定时任务框架)最简单使用教程
有时候需要部署一些很简单的python定时任务,使用APScheduler是很好的选择.只需要简单的设置几个参数,就可以实现定时.定分甚至秒来跑. 第一步:用pip安装APScheduler pip ...
- Python爬虫:通过做项目,小编了解了酷狗音乐的加密过程
1.前言 小编在这里讲一下,下面的内容仅供学习参考,切莫用于商业活动,一经被相关人员发现,本小编概不负责!读者切记切记. 2.获取音乐播放列表 其实,这就是小编要讲的重点,因为就是这部分用到了加密. ...
- Jetpack Compose学习(6)——关于Modifier的妙用
原文: Jetpack Compose学习(6)--关于Modifier的妙用 | Stars-One的杂货小窝 之前学习记录中也是陆陆续续地将常用的Modifier的方法穿插进去了,本期就来详细的讲 ...
- Conda 命令
Conda 命令 1 检验当前conda的版本 conda -V 2 conda常用的命令 查看已有的虚拟环境 conda env list 创建虚拟环境和删除虚拟环境 anaconda命令创建pyt ...
- NOI 2016 Day1 题解
今天写了NOI2016Day1的题,来写一发题解. T2 网格 题目传送门 Description \(T\) 次询问,每次给出一个 \(n\times m\) 的传送门,上面有 \(c\) 个位置是 ...
- bzoj2038 小z的袜子 (莫队)
题目大意 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只袜子从1到N编 ...
- Golang/Java 实现无重复字符的最长子串 - LeetCode 算法
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-subs ...
- python函数参数类型:位置参数、默认参数、动态参数、关键字参数
1.位置参数:调用函数的时候传的参数,参数默认按顺序赋值,如果是指定那个参数赋值,不关注顺序.指定参数a=1,b=2 就在函数体内a=1,b=2 2.默认参数:在定义函数的时候,给某个参数设置默认值 ...
- 【转载】[经验] 嵌入式stm32实用的排序算法 - 交换排序
Ⅰ.写在前面 前面写了关于ADC采集电压的文章,大家除了求平均的方式来处理采样值,还有没有使用到其他的方式来处理采集值呢? 在某些情况下就需要对一组数据进行排序,并提取头特定的数据出来使用. 排序的应 ...
- Dapr-服务调用
前言 上一篇对Dapr进行了了解,并搭建了Dapr环境.接下来就对Dapr的各个构建块类型的了解.应用实际案例. 一.服务调用: 在许多具有多个需要相互通信的服务的环境中,都会面临着很多问题. 如: ...