Linux下 跟我一起学makefile,非常简单,一学就会。

第一步,先创建5个文件 main.c,mytool1.h,mytool1.c,mytool2.h,mytool2.c,makefile

/***mytool1.h---------

#ifndef _MYTOOL1_H
#define _MYTOOL1_H
void mytool1_print(char *print_str);
#endif
***/


/***mytool1.c-----

#include <stdio.h>
void mytool1_print(char *print_str)  
{  
	printf("This is mytool1 print %s\n",print_str);
}
***/


/****mytool2.h-----

#ifndef _MYTOOL2_H
#define _MYTOOL2_H
void mytool2_print(char *print_str);
#endif
****/


/*****mytool2.c-----

#include <stdio.h>
void mytool2_print(char *print_str)
{
        printf("This is mytool2 print %s\n",print_str);
}
*****/


/******main.c---------

#include "mytool1.h"  
#include "mytool2.h"  
#include <stdio.h>

int main(int argc,char *argv[])
{
	mytool1_print("hello");
	mytool2_print("hello");
	return 0;
}

*******/

makefile版本1,

/****makefile
main : main.o mytool1.o mytool2.o
	gcc -o main main.o mytool1.o mytool2.o
main.o : main.c mytool1.h mytool2.h
	gcc -c main.c
mytool1.o : mytool1.c mytool1.h
	gcc -c mytool1.c
mytool2.o : mytool2.c mytool2.h
	gcc -c mytool2.c
clean :
	rm main main.o mytool1.o mytool2.o
***/
tips1: 冒号前面的文件依赖后面的文件。
tips2: gcc这些命令必须以“Tab”符起头,不然无效
tips3: 如果是c++文件用gcc改成g++
这里我的文件都放在Makefiles文件夹中,
在终端(windows下叫控制台)里输入make命令,就可以自动生成main.o mytool1.o mytool2.o (*.o就是中间文件)
并链接生成执行文件main(windows下一般后缀为exe)
administrator@ubuntu:~/Desktop/Makefiles$ make

运行该执行文件命令如下
administrator@ubuntu:~/Desktop/Makefiles$ ./main

一键清除执行文件和.o文件
administrator@ubuntu:~/Desktop/Makefiles$ make clean
是不是很简单,不要急,这个makefile太麻烦,能不能进一步简化呢?

makefile版本2

/****makefile
Objects = main.o mytool1.o mytool2.o
main : $(Objects)
	gcc -o main $(Objects)
main.o : main.c mytool1.h mytool2.h
	gcc -c main.c
mytool1.o : mytool1.c mytool1.h
	gcc -c mytool1.c
mytool2.o : mytool2.c mytool2.h
	gcc -c mytool2.c
clean :
	rm main $(Objects)
***/

tips1: Objects = main.o mytool1.o mytool2.o// Objects 相当于变量名,$(Objects )就是取里面的值

makefile版本3

/****makefile
#$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件
Objects = main.o mytool1.o mytool2.o
main : $(Objects)
	gcc -o $@ $^
main.o : main.c mytool1.h mytool2.h
	gcc -c $<
mytool1.o : mytool1.c mytool1.h
	gcc -c $<
mytool2.o : mytool2.c mytool2.h
	gcc -c $<
clean :
	rm main $(Objects)
***/

makefile版本4


/****makefile
#$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件
Objects = main.o mytool1.o mytool2.o
main : $(Objects)
	gcc -o $@ $^
.c.o :
	gcc -c $<
clean :
	rm main $(Objects)
***/

makefile版本5


/****makefile
#$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件 
#1、wildcard : 扩展通配符
#2、notdir : 去除路径
#3、patsubst :替换通配符
DIR_INC = ./include
DIR_SRC = ./src
DIR_OBJ = ./obj
DIR_BIN = ./bin
SRC = $(wildcard ${DIR_SRC}/*.c)
OBJ = $(patsubst %.c,${DIR_OBJ}/%.o,$(notdir ${SRC}))
TARGET = main
BIN_TARGET = ${DIR_BIN}/${TARGET}
CC = gcc
CFLAGS = -g -Wall -I${DIR_INC}

$(shell mkdir -p ${DIR_INC})
$(shell mkdir -p ${DIR_SRC})
$(shell mkdir -p ${DIR_OBJ})
$(shell mkdir -p ${DIR_BIN})

${BIN_TARGET}:${OBJ}
	$(CC) $(OBJ)  -o $@  
${DIR_OBJ}/%.o:${DIR_SRC}/%.c
	$(CC) $(CFLAGS) -c  $< -o $@
.PHONY:clean
clean:
	rm ${DIR_OBJ}/*.o $(BIN_TARGET)
***/


感谢fengxiaoke_fxk无私奉献, 原文出自http://blog.csdn.net/fengxiaoke_fxk/article/details/7525804
我在其文章基础上进行修订,深圳布吉 2015-7-1日 晚   by Mr. foot brother
如果对本程序有疑惑,可以留言,或者你有更好的idea,也可以告诉我。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Makefile 在 Unix 上写程式的人大概都碰过 Makefile,尤其是用 C 来开发程式的 人。用 make 来开发和编译程式的确很方便,可是要写出一个 Makefile 就不简单了。偏偏介绍 Makefile 的文件不多,GNU Make 那份印出来要几 百页的文件,光看完 Overview 就快阵亡了,难怪许多人闻 Unix 色变。 本文将介绍如何利用 GNU Autoconf 及 Automake 这两套软体来协助我们 『自动』产生 Makefile 档,并且让开发出来的软体可以像 Apache, MySQL 和常见的 GNU 软体一样,只要 ``./configure'', ``make'', ``make install'' 就可以把程式安装到系统中。如果您有心开发 Open Source 的软体,或只是想在 Unix 系统下写写程式。希望这份介绍文件能 帮助您轻松地进入 Unix Programming 的殿堂。 1. 简介 Makefile 基本上就是『目标』(target), 『关连』(dependencies) 和 『动作』三者所组成的一连串规则。而 make 就根据 Makefile 的规则 来决定如何编译 (compile) 和连结 (link) 程式。实际上,make 可做的 不只是编译和连结程式,例如 FreeBSD 的 port collection 中, Makefile 还可以做到自动下载原始程式套件,解压缩 (extract) ,修补 (patch),设定,然後编译,安装至系统中。 Makefile 基本构造虽然简单,但是妥善运用这些规则就也可以变出许多不 同的花招。却也因此,许多刚开始习写 Makefile感到没有规范可 循,每个人写出来的 Makefile 长得都不太一样,不知道从何下手,而且 常常受限於自己的开发环境,只要环境变数不同或路径改一下,可能 Makefile 就得跟着修改。虽然有 GNU Makefile Conventions (GNU Makefile 惯例) 订出一些使用 GNU 程式设计时撰写 Makefile 的一些标 准和规范,但是内容很长而且很复杂, 并且经常做些调整,为了减轻程式 设计师维护 Makefile 的负担,因此有了 Automake。 程式设计师只需写一些预先定义好的巨集 (macro),交给 Automake 处理 後产生一个可供 Autoconf 使用的 Makefile.in 档。再配合利用 Autoconf 产生的自动设定档 configure 即可产生一份符合 GNU Makefile 惯例的 Makeifle 了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值