Chinaunix首页 | 论坛 | 博客
  • 博客访问: 184596
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 903
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-11 15:05
个人简介

Never say die!

文章分类

全部博文(31)

文章存档

2014年(31)

分类: LINUX

2014-05-17 21:02:37

1 / Makefile使用 /**/ Makefile使用

                                                                Makefile常识

    1、 Makefile是一个文件

    2、 功能: 用作整个工程的编译


                                                    Makefile基本用法


    1、 首先建立一个Makefile文件,写入内容告诉make命令如何编译和链接我们的文件


    2、 使用规则:

            目标:依赖文件1 依赖文件2                //可以有多个依赖文件,"依赖文件"就是要编译的文件,"目标"就是要生成的文件

            按TAB键 命令                                      //写上自己要执行的命令


       *解释*: "依赖文件" 就是要编译的文件, "目标" 就是要生成的文件,生成该目标文件需要后面的依赖文件才可以

       eg: main : main.c  file1.o  file2.o

                       gcc  main.c  file1.o  file2.o  -o  main

               file1.o: file1.c

                       gcc  -c  -o file1.o  file1.c

              file2.o: file2.c

                      gcc  -c  -o file2.o  file2.c


        *分析* :1)    上面一共有三个目标:main   file1.o    file2.o

                        2)     第2,3个目标借助 -c 只编译不链接生成的是二进制文件*.o

                        3)    用第1个目标把第2,3目标及主依赖文件main.c一块生成一个可执行的文件main


      *总结* :1)     命令一定要按TAB键;

                     2)     make默认执行第一个目标,因此第2,3目标用 -c 生成*.o的二进制文件而不生成可执行文件;

                     3)    执行make有作用,前提是该目录下没有对应的可执行文件或要编译的文件已经更改;

                     4)    不要一个目标依赖多个.c文件;

                     5)    当一行写不下时,可以用\来换到下一行写;


    3、 Makefile文件下面还可以添加 伪目标

      伪目标:不是一个真正的文件名,但可以给该伪目标指定要执行的命令,之后 make + 伪目标 就能执行该命令

      eg: clean :

                   rm  *.o  main

           若执行 make  clean 就可以把所有的*.o目标文件及可执行文件main一块删除


    4、 灵活使用变量简化操作

      makefile常用变量:         $^                代表所有的依赖文件

                                                $<                代表第一个依赖文件

                                                $@               代表目标

                                            %.格式             代表所有该格式的文件(在vi替换命中令也使用了%代表所有)


     eg:file:file1.o  file2.o

                     gcc  file1.o  file2.o  -o  file

             file1.o: file1.c

                     gcc  -c  -o file1.o  file1.c

             file2.o: file2.c

                     gcc  -c  -o file2.o  file2.c

       

         clean:

             rm  *.o  file                        


      用变量简化写法:


    file: file1.o  file2.o
           gcc  $^  -o  $@
    %.o: %.c
            gcc -c  $<  -o  $@

     clean:
            rm  *.o  file                //命令可根据需求定义



     *分析*: 以后不管有多少个.c文件,都可以用上面的后两行表示,先生成二进制.o文件,之后可以选择哪个.o文件合成为一个执行文件。


    5、 在第二行命令前加上@,在make执行时会显示执行的命令


    6、 -o + 输出的文件名,对于它的位置放法,可以这样:当有编译选项时,放前面;没有,就放后边;


                                   


阅读(1754) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~