|
考察下面的示例代码:
main.c
#include <stdio.h>
int main(){
printf("hello world!");
return 0;
}
正常情况下,通过 gcc 在命令行将其编译后产出相应文件,可执行文件或 object 文件等。
上面命令编译后运行 main.out 可执行文件。
$ ./main.out
hello world!
Make 工具
通过 make 命令,可以将上面的编译进行有效自动化管理。通过将从输入文件到输出文件的编译无则编写成 Makefile 脚本,Make 工具将自动处理文件间依赖及是否需要编译的检测。
make 命令所使用的编译配置文件可以是 Makefile,makefile 或 GUNMake。
其中定义任务的基本语法为:
target1 [target2 ...]: [pre-req-1 pre-req-2 ...]
[command1
command2
......]
上面形式也可称作是一条编译规则(rule)。
其中,
target 为任务名或文件产出。如果该任务不产出文件,则称该任务为 Phony Targets。make 内置的 phony target 有 all, install 及 clean 等,这些任务都不实际产出文件,一般用来执行一些命令。
pre-req123... 这些是依赖项,即该任务所需要的外部输入,这些输入可以是其他文件,也可以是其他任务产出的文件。
command 为该任务具体需要执行的 shell 命令。
Makefile 示例
比如文章最开始的编译,可通过编写下面的 Makefile 来完成:
Makefile
all:main.out
main.out: main.c
gcc -o main.out main.c
clean:
rm main.out
上面的 Makefile 中定义了三个任务,调用时可通过 make <target name> 形式来调用。
比如:
$ make main.out
gcc -o main.out main.c
产出 main.out 文件。
再比如:
该 clean 任务清除刚刚生成的 main.out 文件。
三个任务中,all 为内置的任务名,一般一个 Makefile 中都会包含,当直接调用 make 后面没有跟任务名时,默认执行的就是 all。
$ make
gcc -o main.out main.c
命令的换行
如果一条编译规则中所要执行的 shell 命令有单条很长的情况,可通过 \ 来换行。
main.out: main.c
gcc \
-o main.out \
main.c
注意 \ 与命令结尾处需要间隔一个空格,否则识别出错。
main.out: main.c
gcc\ #
- Gradle Android最新自动化编译脚本教程
转自:http://blog.csdn.net/changemyself/article/details/39927381 一.前言 Gradle 是以 Groovy 语言为基础,面向Java应用为主 ...
- Gradle Android它自己的编译脚本教程的最新举措(提供demo源代码)
一.前言 Gradle 是以 Groovy 语言为基础,面向Java应用为主.基于DSL(领域特定语言)语法的自己主动化构建工具. 上面这句话我认为写得非常官方,大家仅仅需知道Gradle能够用来an ...
- SCons - 简单而强大的项目编译脚本
N年前学的makefile,当时还勉强能写一些简单的工程编译,现在已经基本忘了.makefile确实编写复杂,而且平时也不是经常使用,容易忘记.偶识了scons,一切都变的简单了.最近研究了下scon ...
- Android系统编译脚本理解
android源码编译步骤: 1. repo sync 代码(下载代码) 2.start branch(用哪个分支,git相关) 3. 到根目录(android目录) $cd android/ 4. ...
- FFmpeg示例程序合集-批量编译脚本
此前做了一系列有关FFmpeg的示例程序,组成了<最简单的FFmpeg示例程序合集>,其中包含了如下项目:simplest ffmpeg player: ...
- Android NDK学习(二):编译脚本语法Android.mk和Application.mk
一.Android.mk Android.mk分为一下几部分: LOCAL_PATH:= $(call my-dir), 返回当前文件在系统中的路径,Android.mk文件开始时必须定义该变量. i ...
- Powershell极速教程-如何在三分钟内编写项目编译脚本
分析及思路 来看一下项目目录结构 炒鸡正常的三板斧src+docs+tests.咦,怎么会多出一个build的文件夹呢,这就是我们今天要研究的目录.今天我会带着大家在五分钟之内编写一个极简的编译脚本. ...
- Skia构建系统与编译脚本分析
分析下Skia的构建系统,详细编译过程參看Windows下从源代码编译Skia.这里以ninja为例来分析.运行以下三条命令就能够完毕编译: SET "GYP_GENERATORS=ninj ...
- ffmpeg学习笔记-编译脚本
之前已经用他人的编译脚本对ffmpeg进行了成功编译,那么在裁剪ffmpeg的时候需要指定文件,这时候应该怎么编写编译脚本呢?本文目的在于说明ffmpeg编译脚本的编写 首先在ffmpeg的目录下新建 ...
随机推荐
- 用Multisim实现彩灯循环控制器
2019/06/06 !转载请注明出处 1.设计任务目的与要求 1.1 展示器件 10路彩灯分别用10个发光二极管L0.L1…..L9模拟,发光二极管L0.L1…..L9从左到右排列. 1.2 要求显 ...
- bzoj 3555 企鹅QQ
https://www.lydsy.com/JudgeOnline/problem.php?id=3555 枚举每一位字符,计算字符两侧的哈希值,然后进行比较,用map或排序记录出与其相同的字符串数量 ...
- 条款26:尽可能延后变量定义式的出现时间(Postpone variable definitions as long as possible)
NOTE : 1.尽可能延后变量定义式的出现时间.这样做可增加程序的清晰度并改善程序效率.
- pwnable.kr cmd1之write up
看一下源代码: #include <stdio.h> #include <string.h> int filter(char* cmd){ ; r += strstr(cmd, ...
- IntrospectorCleanupListener监听器防止内存溢出
<listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</ ...
- luogu2894 [USACO08FEB]酒店Hotel
跟线段树求区间最值一样每个节点维护左边开始的最大连续空房间数.右边开始的最大连续空房间数.这个区间内的最大连续空房间数 #include <iostream> #include <c ...
- 大数据学习——linux常用命令(三)
三 文件操作 1创建文件 touch somefile.txt 创建一个空文件somefile.txt > 重定向操作符 echo "woshiwoa"> some.t ...
- asp.net 页面缓存、数据缓存
页面缓存,webform框架的aspx页面,服务器引擎生成的页面可以被缓存.
- 【bzoj1055】[HAOI2008]玩具取名
[bzoj1055][HAOI2008]玩具取名 2014年12月1日3,0111 Description 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名 ...
- Django 的信号 & Flask 的信号
信号:框架内部已帮助开发者预留的可扩展的位置 一.Django 的信号 项目目录结构: django_signal |--- app01 |--- models.py |--- views.py .. ...
|