原创 深入浅出学Makefile<一:自己写Makefile>

2012-8-9 21:42 2484 17 20 分类: 消费电子

(第一部分:自己编写makefile )

                        整理:下家山

前言:

Makefile其中奥妙无穷,足可以让一个人当作一辈子的工作去做!但,我们仅仅是应用,所以我们的目标是能读懂,并且会写一些简单的makefile。很多东西不必深究!!!

一:编辑.c源文件

         我们先用vi建立三个.c文件,分别为a.c,b.c,c.c

    root@parson-desktop:/home/parson/tmp/mk_test# ls

root@parson-desktop:/home/parson/tmp/mk_test# vi a.c

 

#include

void printa(void)

{

         printf("call function %s\n",__FUNCTION__);

}

~

~

~

~

"a.c" [New File] 5 lines, 85 characters written

root@parson-desktop:/home/parson/tmp/mk_test#

把a.c拷贝成b.c c.c

root@parson-desktop:/home/parson/tmp/mk_test# ls

a.c

root@parson-desktop:/home/parson/tmp/mk_test# cp a.c b.c

root@parson-desktop:/home/parson/tmp/mk_test# cp a.c c.c

root@parson-desktop:/home/parson/tmp/mk_test# ls

a.c  b.c  c.c

root@parson-desktop:/home/parson/tmp/mk_test#

利用sed替换b.c中printa成printb;

利用sed替换c.c中printa成printc;

root@parson-desktop:/home/parson/tmp/mk_test# sed -i "s/printa/printb/" b.c

root@parson-desktop:/home/parson/tmp/mk_test# cat b.c

#include

void printb(void)

{

         printf("call function %s\n",__FUNCTION__);

}

root@parson-desktop:/home/parson/tmp/mk_test# sed -i "s/printa/printc/" c.c

root@parson-desktop:/home/parson/tmp/mk_test# cat c.c

#include

void printc(void)

{

         printf("call function %s\n",__FUNCTION__);

}

root@parson-desktop:/home/parson/tmp/mk_test#

再写一个主文件m.c来调用其他三个文件

root@parson-desktop:/home/parson/tmp/mk_test# vi m.c

#include

 

        void printa(void);

        void printb(void);

        void printc(void);

 

        int main(void)

        {

            printa();

            printb();

            printc();

           

            return 0;

        }

~

"m.c" [New File] 14 lines, 178 characters written

root@parson-desktop:/home/parson/tmp/mk_test#

root@parson-desktop:/home/parson/tmp/mk_test# ls

a.c  b.c  c.c  m.c

=======================================================================================

By 下家山 Q群 75303301        上海松江文汇路928号258室    松江大学城   

上海索漫科技  http://www.xiajiashan.com  专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训

二:不用makefile编译

所有文件已建立,编译所有文件,生成可执行文件m

root@parson-desktop:/home/parson/tmp/mk_test# gcc -o m *.c

root@parson-desktop:/home/parson/tmp/mk_test# ls

a.c  b.c  c.c  m  m.c

可执行文件m已得到,运行结果

root@parson-desktop:/home/parson/tmp/mk_test# ./m

call function printa

call function printb

call function printc

root@parson-desktop:/home/parson/tmp/mk_test#

三:简单的makefile如此简单

root@parson-desktop:/home/parson/tmp/mk_test# vi makefile

 

test:

        gcc -o $@ *c

~

~

~ "makefile" [New File] 2 lines, 20 characters written

其中$@即代表目标test,参考徐海滨写的makefile

root@parson-desktop:/home/parson/tmp/mk_test# ls

a.c  b.c  c.c  m  makefile  m.c

root@parson-desktop:/home/parson/tmp/mk_test# cat makefile

test:

        gcc -o $@ *c

root@parson-desktop:/home/parson/tmp/mk_test# make

gcc -o test *c

root@parson-desktop:/home/parson/tmp/mk_test# ls

a.c  b.c  c.c  m  makefile  m.c  test

root@parson-desktop:/home/parson/tmp/mk_test# ./test

call function printa

call function printb

call function printc

加入依赖关系

root@parson-desktop:/home/parson/tmp/mk_test# vi makefile

=======================================================================================

By 下家山 Q群 75303301        上海松江文汇路928号258室    松江大学城   

上海索漫科技  http://www.xiajiashan.com  专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训

OBJS=a.o b.o c.o m.o

 

test:$(OBJS)

        gcc -o $@ *.c

~

~

~

~

"makefile" 5 lines, 51 characters written

root@parson-desktop:/home/parson/tmp/mk_test# ls

a.c  b.c  c.c  m  makefile  m.c  test

root@parson-desktop:/home/parson/tmp/mk_test# rm test

root@parson-desktop:/home/parson/tmp/mk_test# make

cc    -c -o a.o a.c

cc    -c -o b.o b.c

cc    -c -o c.o c.c

cc    -c -o m.o m.c

gcc -o test *.c

root@parson-desktop:/home/parson/tmp/mk_test# ls

a.c  a.o  b.c  b.o  c.c  c.o  m  makefile  m.c  m.o  test

root@parson-desktop:/home/parson/tmp/mk_test# ./test

call function printa

call function printb

call function printc

root@parson-desktop:/home/parson/tmp/mk_test#

加入伪目标clean

root@parson-desktop:/home/parson/tmp/mk_test# ls

a.c  a.o  b.c  b.o  c.c  c.o  m  makefile  m.c  m.o  test

root@parson-desktop:/home/parson/tmp/mk_test# vi makefile

 

 

OBJS=a.o b.o c.o m.o

 

test:$(OBJS)

        gcc -o $@ *.c

 

clean:

        rm -f *.o test

~

~

~

~

"makefile" 8 lines, 75 characters written

root@parson-desktop:/home/parson/tmp/mk_test# ls

a.c  a.o  b.c  b.o  c.c  c.o  m  makefile  m.c  m.o  test

root@parson-desktop:/home/parson/tmp/mk_test# make clean

rm -f *.o test

root@parson-desktop:/home/parson/tmp/mk_test# ls

a.c  b.c  c.c  m  makefile  m.c

root@parson-desktop:/home/parson/tmp/mk_test#

 写于上海松江   作者:下家山(请尊重原创, 转载请注明)  http://www.xiajiashan.com,有什么问题可与我联系:ximenpiaoxue4016@sina.com

文章评论3条评论)

登录后参与讨论

wtcheng_600655433 2011-7-6 15:39

很想学一下Linux

用户1580664 2011-6-29 11:15

呃,惭愧,看不懂。囧

用户1602177 2011-6-23 10:25

感谢博主分享~~

用户1338534 2010-10-9 10:11

老板你太有才了!敬佩敬佩!!
相关推荐阅读
用户1037328 2016-04-17 17:59
好的理论可以避免犯错——读《丈量世界》有感!
     《丈量世界》,早就因为仰慕高斯而想看这本书      1.殊途同归      这本书写的是高斯和洪堡两个人,为什么要把这两个人放在一起写呢?因为高斯是一个宅男,不喜欢什么旅游,考察!他觉得...
用户1037328 2016-04-05 09:10
叛逆在爱因斯坦性格中的重要性(一)
叛逆在爱因斯坦性格中的重要性(一) 《爱因斯坦传》读书笔记      昨天晚上,读完了2016年书单的第二部书,《爱因斯坦传》。我想梳理一下自己读这本书的收获,或者说感悟!在读这...
用户1037328 2016-04-05 09:09
叛逆在爱因斯坦性格中的重要性(二)
叛逆在爱因斯坦性格中的重要性(二) 《爱因斯坦传》读书笔记                                四  叛逆性 在爱因斯坦的同时期科学家中,我想比他IQ...
用户1037328 2014-07-09 19:55
RTEMS系统时钟原理
作者,下家山(转载请注明作者及出处,请尊重原创)   专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训 一:从应用看原理      每个...
用户1037328 2014-07-09 19:47
RTEMS在S3C2410上的移植(一)
作者:下家山(转载,请注明) 1:RTEMS开发环境建立 1.1开发环境建立前的准备工作 因为RTEMS开发环境主要用的是GNU的工具链,所以需要一台装有Linux的HOST. 1.2...
用户1037328 2014-07-09 19:45
深入浅出学Makefile<三,如何自动生成Makefile>
(请尊重原创,转载请注明,作者:下家山) 五: 运行make编译得到可执行文件 root@parson-desktop:/home/parson/tmp/automk# make gcc ...
我要评论
3
17
关闭 站长推荐上一条 /2 下一条