二、makefile(上)
01.make工具
  利用make工具可以自动完成编译工作。这些工作包括:如果修改了某几
个源文件,则只重装新编译这几个源文件;如果某个头文件被修改了,则
重新编译所有包含该头文件的源文件。利用这个自动编译可大大简化开发
工作,避免不必要的重新编译。
  make工具通过一个称为Makefile的文件来完成并自动维护编译工作。
Makefile文件描述了整个工程的编译、链接等规则。
02.Makefile的基本规则:
  TARGET...:DEPENDENCIES...
COMMAND
...
  目标(TARGET)程序产生的文件,如何执行文件和目标文件;目标也可
以是要执行的动作,如clean,也成为伪目标。
  依赖(DEPENDENCIES)是用来产生目标的输入文件列表,一个目标通常依
赖于多个文件。
  命令(command)是make执行的动作(命令是shell命令或是可在shell
下执行的程序)。注意:每个命令行的起始字符必须为TAB字符!
  如果DEPENDENCIES中有一个或多个文件更新的话,COMMAND就要执行,
这就是Makefile最核心的内容
#touch main.c add.c sub.c add.h sub.h
#ls
main.c add.c sub.c add.h sub.h
#vi main.c
int main()
{
return 0;
}
#vi Makefile
main:main.o add.o sub.o
gcc -Wall -g main.o add.o sub.o -o main
main.o:main.c
gcc -Wall -g -c main.c -o main.o
add.o:add.c add.h
gcc -Wall -g -c add.c -o add.o
sub.o:sub.c sub.h
gcc -Wall -g -c sub.c -o sub.o
#make(默认生成第一个目标)
#ls
main
#make(文件没有变化)
make:'main' id up to date
#touch sub.h(重新生成sub.h)
#make
gcc -Wall -g -c sub.c -o sub.o
gcc -Wall -g main.o add.o sub.o -o main
clean:(伪目标,并不是要生成的文件,用来删除这些文件)
rm -f main main.o add.o sub.o
#make clean
将链接文件全部删除
#make main.o
只生成main.o这个文件
.PHONY:clean(Makefile文件的最开头.表示clean是一个伪目标)
如果Makefile所在的文件夹下,存在clean文件,则执行make clean时会
提示:make:'clean'is up to date.
03.Makefile自动化变量
$@:规则的目标文件名
$<:规则的第一个依赖文件名
$^:规则的所有依赖文件列表
#vi Makefile.1
.PHONY:clean
OBJECTS=main.o add.o sub.o
main:$(OBJECTS)
gcc -Wall -g $^ -o $@
main.o:main.c
gcc -Wall -g -c $< -o $@
add.o:add.c add.h
gcc -Wall -g -c $< -o $@
sub.o:sub.c sub.h
gcc -Wall -g -c $< -o $@
clean:
@(加@不会打印在屏幕上)echo "begin delete..."(命令还是要
执行)
rm -f main $(OBJECTS)
#make
(正常工作)
#make clean
(正常工作)
#make clean -f Makefile.1
(以Makefile.1的规则来执行clean这个命令)
begin delete...
rm -f main main.o add.o sub.o
04.Makefile编译多个可执行文件
  模式规则:%.o:%.c
  后缀规则:.c.o
#mkdir 01
#mv *.c 01
#ls
#mv *.* 01
#ls
01 Makefile
#mv Makefile 01
#ls
#mkdir 02
#cd 02
#touch 01test.c 02test.c(01test.c,02test.c都要生成可执行文件)
#vi 01test.c 
int main(void)
{
return 0;
}
#vi02test.c
int main(void)
{
return 0;
}
#vi Makefile
.PHONY:clean
BIN=01test 02test
all:$(bin)
01test:01test.o
gcc -Wall -g  $^ -o $@
02test:02test.o
gcc -Wall -g  $^ -o $@
clean:
rm -f *.o $(BIN)
#make
01test 02test
#vi Makefile
BIN依赖两个文件
all这个目标依赖BIN两个文件
编译器自动将同名的"*.c"文件生成同名可执行文件
#make
cc 01test.c -o 01test
cc 02test.c -o 02test
#make clean
#ls
01test.c 02test.c Makefile
#make
cc -c -o 01test.o 01test.c
gcc -Wall -g -c 01test.o -o 01test
#make clean
#ls
01test.c 02test.c Makefile
#vi Makefile
%.o:%.c(将对应的.c文件生成.o文件)
gcc -Wall -g -c $< -o $@
#make clean
#make
#ls
#vi Makefile
CC=gcc
CFLAGS=-Wall -g
#%.o:%.c
# $(CC) $(CFLAGS) -c $< -o $@
.c.o:
$(CC) $(CFLAGS) -c $< -o $@
01test:01test.o
$(CC) $(CFLAGS) $^ -o $@
02test:02test.o(将光标定位到这里,输入2yy,复制两行)
$(CC) $(CFLAGS) $^ -o $@
(点击p,复制到这里)
#make clean
#make
#ls
#vi 03test.c
int mian(void)
{
return 0;
}

Linux开发工具之Makefile(上)的更多相关文章

  1. Linux开发工具之Makefile(下)

    二.Makefile(下) 01.make常用内嵌函数 函数调用   $(function arguments) $(wildcard PATTERN)   当前目录下匹配模式的文件   例如:src ...

  2. Linux开发工具的使用

    1.   Linux开发工具的使用 Vim编译的使用 Gdb调试工具的使用 Makefile的编写 linux跟踪调试 SSH的使用 subversion的使用 1.   Linux开发工具的使用 V ...

  3. Linux开发工具教程

    今天把上个星期写的Linux开发工具相关的教程整理一下,方便阅读: 1.第一课 GCC入门: 2.第二课 GCC入门之静态库以及共享库: 3.第三课 Makefile文件的制作(上) : 4.第四课 ...

  4. 基于AM3352/AM3354/AM3358/AM3359的Linux 开发环境搭建(上)

    遇到不少人新手小白问,前辈如何搭建一个优良的Linux 开发环境?之前一直都是在用win开发,现在想要尝试用Linux做开发等等一系列的问题.开源一直是给电子行业工作者提供了一种向技术更深处进发的机遇 ...

  5. Linux开发工具之gdb(上)

    三.gdb调试(上) 01.gdb:gdb是GNU debugger的缩写,是编程调试工作. 功能:   启动程序,可以按照用户自定义的要求随心所欲的运行程序:   可让被调试的程序在用户所指定的调试 ...

  6. Linux开发工具之gcc

    一.gcc入门(上)   1.gcc相关概念   gcc(GNU C Compiler)编译器,最初支持C语言,现已支持C.C++.Java.Pascal.Ada.COBOL语言等:支持多种硬件平台: ...

  7. 蜂鸟E203系列——Linux开发工具

    欲观原文,请君移步 Vivado安装 vivado是运行工程的工具,所以必须安装 后台回复[vivado2017]可获取vivado 2017.4 | 后台回复[vivado2020]可获取vitis ...

  8. Linux小工具:文件上传ftp服务器

    工作期间,每次将文件上传至ftp服务器时,均需要手工输入ip.用户名.密码等,因此,考虑编写脚本完成文件的上传任务.具体的脚本sync.sh如下: #!/bin/bash source ~/.bash ...

  9. Linux开发工具之gdb(下)

    三.gdb调试(下) 01.查看运行时数据 print - 查看变量值 ptype - 查看类型 print array - 查看数组 print *array@len - 查看动态内存 print ...

随机推荐

  1. sphinx 简介以及安装 以及php拓展开启

    一 sphinx 简介   在 使用mysql数据库过程中,如果想实现全文检索的优化,可以使用mysql自带全文索引,但是不支持中文..关于sphinx的安装网上很多教程写的都 不错比如:http:/ ...

  2. C#中调用WIN32的API

    最近在学习C#中的GDI部分,本来尝试编写一个字幕控件(其实还是用label比较合适),但是发现控件中用GDI将整个控件粉刷貌似不行(应该是我水平不行),所以就去捣鼓了下WIN32的DLL,发现用AP ...

  3. Idea设置自动导包

    默认 IntelliJ IDEA 是没有开启自动 import 包的功能.  勾选标注 1 选项,IntelliJ IDEA 将在我们书写代码的时候自动帮我们优化导入的包,比如自动去掉一些没有用到的包 ...

  4. MySql可视化工具MySQL Workbench使用教程

    1. MySQL Workbench MySQL Workbench 为数据库管理员.程序开发者和系统规划师提供可视化的Sql开发.数据库建模.以及数据库管理功能. 2.MySQL Workbench ...

  5. [POJ 2774] Long Long Message 【后缀数组】

    题目链接:POJ - 2774 题目分析 题目要求求出两个字符串的最长公共子串,使用后缀数组求解会十分容易. 将两个字符串用特殊字符隔开再连接到一起,求出后缀数组. 可以看出,最长公共子串就是两个字符 ...

  6. Jersey Politics

    poj2454:http://poj.org/problem?id=2454 题意:给你3*k个数,然后让你分成三堆,使得至少其中的两堆中的数字之和大于500*k.题解:这道题一开始我并不知道怎么做, ...

  7. Unity 随机数的使用

    脚本语言:C# 一个比较常用的例子是游戏中的主角碰到场景中的NPC时,NPC会随机做出反应,例如有50%几率来友好的致敬,25%几率走开,20%几率反身攻击和%%的几率赠送礼物. 创建一个NPCTes ...

  8. bzoj3668

    noi水题,直接推出来每一位上取什么值才能取1直接搞就可以了 ..] of longint; x,n,i,j,k,t,m,ans:longint; fl:boolean; s:string; ch:c ...

  9. 【转】Android JNI编程—JNI基础

    原文网址:http://www.jianshu.com/p/aba734d5b5cd 最近看到了很多关于热补的开源项目——Depoxed(阿里).AnFix(阿里).DynamicAPK(携程)等,它 ...

  10. 图论:(Code Forces) Graph and String

    Graph and String time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...