ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux makefile使用基础

2021-02-28 08:56:05  阅读:191  来源: 互联网

标签:cos makefile 基础 value Linux haha main sin


makefile就像一个Bash脚本,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

1 例子源码
sin_value.c

#include <stdio.h>
#include <math.h>
#define pi 3.14159
float angle;

void sin_value(void)
{
    float value;
    value = sin ( angle / 180. * pi );
    printf ("\nThe Sin is: %5.2f\n",value);
}

cos_value.c


#include <stdio.h>
#include <math.h>
#define pi 3.14159
float angle;

void cos_value(void)
{
    float value;
    value = cos ( angle / 180. * pi );
    printf ("The Cos is: %5.2f\n",value);
}

haha.c

#include <stdio.h>
int haha(char name[15])
{
    printf ("\n\nHi, Dear %s, nice to meet you.", name);
}

main.c


#include <stdio.h>
#define pi 3.14159
char name[15];
float angle;

int main(void)
{
        printf ("\n\nPlease input your name: ");
        scanf  ("%s", &name );
        printf ("\nPlease enter the degree angle (ex> 90): " );
        scanf  ("%f", &angle );
        haha( name );
        sin_value( angle );
        cos_value( angle );
}

分析4个源文件,main.c需要使用另外3个文件中的函数,并且函数文件又用到了math库。

2 手动逐一操作
下面先用gcc进行编译链接执行:

1 编译4个.c源文件,生成对应的.o目标文件。


gcc -c main.c haha.c sin_value.c cos_value.c

2 再进行链接,注意添加库目录。


gcc -o main main.o haha.o sin_value.o cos_value.o -lm -L/usr/lib -L/lib

3 测试。

./main
Please input your name: xxpcb
Please enter the degree angle (ex> 90): 30
Hi, Dear xxpcb, nice to meet you.
The Sin is:  0.50
The Cos is:  0.87

3 使用makefile
3.1 创建一个makefile
vim makefile,文件并编辑如下:

main: main.o haha.o sin_value.o cos_value.o
        gcc -o main main.o haha.o sin_value.o cos_value.o -lm

注意:第2行的开头的空格是键。

3.2 使用编解的makefile进行自动编译
编译器前先清除之前生成的文件,再使用make命令编译:

rm -f main *.o
make

此时已经生成生成完毕了。

3.3 尝试再次使用make编译
查看效果:

make

make: 'main' is up to date.

可以看到,由于程序没有修改过,因而没有重新编译,只是进行更新操作。

4 完善makefile
4.1 添加clean功能

main: main.o haha.o sin_value.o cos_value.o
        gcc -o main main.o haha.o sin_value.o cos_value.o -lm
clean: 
        rm -f main main.o haha.o sin_value.o cos_value.
                c
cc    -c -o cos_value.o cos_value.c
gcc -o main main.o haha.o sin_value.o cos_value.o -lm

4.2 使用变量简化makefile


LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
main: ${OBJS}
        gcc -o $@ ${OBJS} ${LIBS}
clean: 
        rm -f main ${OBJS}

注意:makefile中的变量与bash中的变量,语法稍有不同,makefile变量的基本语法为:

  • 变量之间用 = 隔开,且 = 两侧可以有空格

  • 变量左边不可以有键空格

  • 习惯上变量以大写字母

  • 引用变量使用大括号或括号,如${变量}或$(变量)

  • $@表示当前的目标

4.3 关于CFLAGS
命令行时输入

例如:


CFLAGS="-Wall" make clean main
  • makefile文件中添加’
LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
CFLAGS="-Wall"
main: ${OBJS}
        gcc -o $@ ${OBJS} ${LIBS}
clean: 
        rm -f main ${OBJS}
  • 使用shell默认的环境变量

命令行中指定的CFLAGS优先级最高,然后是makefile文件中指明的CFLAGS,如果前两种都未指明CFLAGS,则使用shell默认的环境变量。

参考:《鸟哥的Linux私房菜 (基础学习篇 第三版)》

标签:cos,makefile,基础,value,Linux,haha,main,sin
来源: https://blog.51cto.com/15060517/2641128

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有