linux 下makefile的入门学习

    xiaoxiao2026-08-13  9

     makefile 文件入门学习

    我的感想吧,我们上linux的时候,各种心累没听多少,下来可真是花了可多心思研究这个ma'kefile 一天,感觉都快吐了,还是不会,自己各种试,搜。没有,是关键,自己动手,丰衣足食!

    1.如果多个文件在同一个目录下,那么是最简单的;

       首先:我们开始vim  main.c  //主函数

    #include<stdio.h>

    #include"head.h"

    int main()

    {

        printf("%d\n",add(4,6);

       printf("%d\n",sub(8,3);

        return 0;

    }

       其次,我们再来 vim disply.c // 主要函数的实现

    #include"head.h"

    int add(int a,int b)

    {

        return a +b;

    }

    int sub(int a,int b)

    {

         if(a > b)

          {

                 return a-b; 

          }

           esle

          {

                  return b - a;

           }

    }

    最后。来vim一个声明

    #ifndef _HEAD_H

    #define _HEAD_H

    int add(int ,int );

    int sub(int ,int);

    #endif

          现在准备工作已经贮备好了:

    在编写makefile之前先了解他的规则:

     target(目标) : prerequisites(依赖条件)                              command(执行命令)

               注意command前面的空白,不能用空格,需要按Tab键

        

        接下来:我们来编译一下:直接命令:make   当你ls时,你就会发现你已经多了两个 .o文件和可执行文件main ----------- 运行一下: ./main 

    结果:

    我们执行一下:make  clean  那些.o main都删除了

    2. 如果你的文件全在不同的目录下,此时你怎么做:

       准备条件:  首先先建立三个目录 ;mkdir  Head     准备放个头文件

                                                                mkdir Test       准备放主函数

                                                                 mkdir  mk        函数的实现

          cd 到Head 底下:vim  heah.h

    #ifndef _HEAD_H

    #define _HEAD_H

    int add(int a,int b);

    int sub(int a,int b);

    #endif

        cd到Test 下放主函数: vim main.c

    #include<stdio.h>

    #include"../Head/head.h"

    int main()

    {

        printf("%d\n",add(4,6);

       printf("%d\n",sub(8,3);

        return 0;

    }

        cd到mk 放个函数实现吧: vim disply.c

    #include"../Head/head.h"

    int add(int a,int b)

    {

        return a +b;

    }

    int sub(int a,int b)

    {

         if(a > b)

          {

                 return a-b; 

          }

           esle

          {

                  return b - a;

           }

    }

          其实仔细看,不难发现我们用的是一个的代码,只是这次放在三个不同的目录底下了而已。但是有点小不一样:(我已经标记出来了)

       既然函数内部有变动,那么makefile也得变动,这个会了,基本你就掌握

         我们必须在主函数所在的目录下  vim  makefile

    方法一:

       

    方法二:(易于修改)

        大功搞成,现在就开始运行和make clean了!

    最后,我想说的时,虽然很累,但是我觉得很值!

    补充一点知识:

    在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时 ,就会出现大量“重定义”的错误。在头文件中实用#ifndef #define #endif能避免头文件的重定义。方法:例如要编写头文件test.h 在头文件开头写上两行:#ifndef _TEST_H #define _TEST_H//一般是文件名的大写 头文件结尾写上一行: #endif   这样一个工程文件里同时包含两个test.h时,就不会出现重定义的错误了。 分析:当第一次包含test.h时,由于没有定义_TEST_H,条件为真,这样就会包含(执行)#ifndef _TEST_H和 #endif之间的代码,           当第二次包含test.h时前面一次已经定义了_TEST_H,条件为假,#ifndef _TEST_H和 #endif之间的代码也就不会再次被包含,这样就避免了重定义了

    转载请注明原文地址: https://ju.6miu.com/read-1311148.html
    最新回复(0)