makefile文件:编译工程文件
其本质是用来编译工程文件(内部可以理解为g++命令),用make命令,实现自动化编译。格式如下:
目标:依赖
(tab) 命令
介绍makefile的最初级版本
当前目录下有 main.cpp temp.cpp temp1.cpp
执行vim makefile 然后输入指令
main:main.cpp temp.cpp temp1.cppg++ -o main main.cpp temp.cpp temp1.cpp
终端输入make,执行写好的指令。
这种方法弊端太多,如果工程文件很多,那么makefile中的代码量太大,如果其中的某一个cpp文件被修改,那么其他的文件需要重新被编译,没必要。
接下来介绍makefile中的变量(执行的功能相当于宏替换):
自定义变量:
例:foo =abc bar=$(foo) 把bar替换成abc;
自带变量:CC CPPFLAGS
自动变量:$@ $< $^
模式规则 % .o:%.c
引入高级版本的makefile
target=main2//名字可替换
objects=main.o temp.o temp1.o
CC=g++
CPPFLAGS=-I./
$(target):$(objects)//g++ -o main2 main.o temp.o temp1.o$(CC) -o $@ $^//$@规则中的目标
%.o :%.c$(CC) -c $< $(CPPFLAGS)//$<第一个条件
.PHONY:clean//伪目标,不检查依赖和更新
clean://删除 可执行文件以及.o文件rm -f $(objects) $(target)
执行make
当前目录下会生成 .o与可执行文件main2,执行makefile clean后清理完成,文件消失。
至此,makefile文件建立完毕。
makefile文件:编译工程文件相关推荐
- 【C++】(九)作用域、生命期、头文件和工程文件
文章目录 作用域和生命期 1 局部变量和全局变量 1.1 局部变量 1.2 全局变量 2 作用域 3 生命期 4 内部函数与外部函数 5 头文件与工程文件 作用域和生命期 1 局部变量和全局变量 1. ...
- linux新建好文件后怎么编译,使用autoconf生成Makefile并编译工程的步骤
前言 在Linux下,编译和链接需要用Makefile,而写好一个Makefile可不容易,写出一个规范的Makefile更是麻烦.我们可以利用autoconf来生成一个Makefile,尤其在大型工 ...
- Progamming Erlang 通过 Makefile 自动编译 .erl 文件
通过 makefile 可以自动化一部分工作,比如编译 .erl 文件 一.在 /root/workspace/erlang/test 中新建两个 .erl 文件,分别是 test.erl ,test ...
- Makefile独立编译ko文件
在工作的过程中,经常需要编译一些Ko模块,如果是单个的c文件编译直接在内核源码里面 obj-m=xxx.o就好 如果这个ko文件需要多个c文件共同编译生成的话,最好以如下的模板来完成编译较好 #首先指 ...
- Eclipse java工程中添加文件+导入工程文件
1.添加源文件 在eclipse上建好java工程,想从别的地方把.java文件加进来,先把.java文件拷贝到src目录下,然后,在src文件夹下按F5刷新就可以了. 2.导入存在的工程文件 在开始 ...
- 编写Makefile:编译当前文件夹以及子文件夹下所有的ccpp文件并生成可执行文件
makevar: (预定义一些变量,包括编译器,g++/gcc编译的参数,全局宏定义等,该文件会包含在Makefle中) KE := make CC := gcc CXX := g++ CXXFLAG ...
- 【MFC】MFC工程文件详解
00. 目录 文章目录 00. 目录 01. 概述 02. 解决方案相关文件 03. 工程相关文件 04. 头文件和源文件 05. 资源文件 06. 预编译头文件 07. 编译目标和中间文件 08. ...
- STM8学习笔记---新建IAR工程文件
1.打开IAR工具 2.选择Project-Create New Project 3.选择Empty project,点击OK. 4.选择文件存储路径,输入工程名,点保存按钮. 5单击左上角新建文件按 ...
- 痞子衡嵌入式:ARM Cortex-M开发文件详解(3)- 工程文件(.ewp)
出处:https://www.cnblogs.com/henjay724/p/8232585.html 大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式开发里的project文件. ...
最新文章
- python 中*args 和 **kwargs的区别
- Mysql 内部结构 / Replication | 原理
- linux更换主板后无法启动网卡
- python List,切片的用法
- Jackson反序列化提示:Can not deserialize instance of Task out of START_ARRAY token
- android智能刷新smart,Android横向智能刷新框架-SmartRefreshHorizontal
- android socket 长连接_php socket如何实现长连接
- java ajax搜索框提示,Javaweb-案例练习-2-给搜索框添加提示
- Mysql SQL查询今天、昨天、n天内、第n天(执行效率不高)
- 摆放家具-定义房子类
- oracle12c asmfd,Oracle 12C R2-新特性-自动配置ASMFD
- POJ 1422 Air Raid (最小路径覆盖)
- AI 终极问题:我们的大脑是一台超级计算机吗?
- php 变量存活期,php 变量生命周期:PHP源码分析-PHP的生_php
- Qt 递归安装父控件的所有子孙控件事件过滤器 遍历安装事件过滤器
- c语言单项选择题标准化考试系统,c语言课程设计(单项选择题标准化考试系统)分析报告.doc...
- 台式计算机最新配置,例举2019推荐组装台式电脑最新配置清单
- torch.max()及其参数探究/torch.max()返回的索引是什么意思
- 项目管理工具 | 软件开发项目管理软件
- LeetCode 544. 输出比赛匹配对(NBA季后赛对阵图)
热门文章
- 4.1 什么是脚手架(CLI)
- 伪元素(3)-解决IE6/IE7/IE8不支持before,after问题
- SpringBoot是什么,可以做什么?
- Silanna Semiconductor与Transphorm联合开发一流的65W USB-C PD GaN适配器参考设计
- “cannot simultaneously fetch multiple bags”的解决方法
- 2022 Jiangsu Collegiate Programming Contest I. Cutting Suffix
- 在ROS中实现双目相机校正(以PointGrey为例)
- java计算机毕业设计体育城场地预定系统前台源码+系统+数据库+lw文档+mybatis+运行部署
- 通信中间件DDS介绍(一)
- #203-[DFS]狼和羊