zoukankan      html  css  js  c++  java
  • 自己写makefile简易教程

    自己写makefile简易教程

    前言:由于个人精力原因,我只写makefile的内容,C语言以及shell指令又不了解的同学,请先学习C语言以及shell指令。


    单个文件的makefile

    写单个文件的makefile时,我们需要了解最基本的格式

    target:prerequistes...
    	command
    	...
    	...
    

    target:是指生成的项目。

    prerequistes:是指生成项目需要的文件。

    command:是指运行的命令。

    下面是具体例子:

    main:main.c
    	gcc -o main main.c
    clean:				#这是一个清除命令,我们需要在shell中通过调用make clean 命令来实现他。
    	rm main
    

    具体的makefile实现需要是需要自己的工程目录下面的,建立一个makefile文件,在该目录下,调用make,就会执行编译。生成我们想要的工程文件。如下图所示

    C4996

    多个文件的makefile

    当我们需要编译多个c文件时,我们就需要把其它c文件编译成.o文件,最后再编译成main文件。

    main:main.c tool.o
    	gcc main.c tool.o -o main
    tool.o:tool.c
    	gcc -c tool.c
    clean:
    	rm *.o main
    

    tool.o:tool.c 表示tool.o项目以来的文件是tool.c,使用的命令是gcc -c tool.c

    clean:项目下的命令rm *.o main*.o的含义是所有的.o文件

    运行make时,是先运行gcc -c tool.c,再运行gcc main.c tool.o -o main

    C496

    编译成多个可执行文件的makefile

    CC=gcc
    FLAGS=-lm -Wall -g
    
    all:main_max main_min
    
    main_max:main_max.c max.o
    	$(CC) $(FLAGS) main_max.c max.o -o main_max
    
    main_min:main_min.c min.o
    	$(CC) $(FLAGS) main_min.c min.o -o main_min
    
    max.o:max.c
    	$(CC) $(FLAGS) -c max.c
    min.o:min.c
    	$(CC) $(FLAGS) -c min.c
    	
    clean:
    	rm *.o main_min main_max
    

    在这里呢,就出现了两条新的命令

    CC=gcc
    FLAGS=-lm -Wall -g
    

    在下面调用是这样的

    $(CC) $(FLAGS) -c min.c
    

    CC=gcc表示编译器为gcc,FLAGS=-ml -Wall -g是特定的链接指令,类似c语言中的宏的使用。

    使用时,直接是$()去替换掉对应的命令即可。就像这样

    $(CC) $(FLAGS) -c min.c
    

  • 相关阅读:
    MySQL 约束
    MySQL 基础
    LeetCode-Backtracking-Easy 回溯算法
    cookie session区别
    mac环境下支持PHP调试工具xdebug,phpstorm监听
    dede修改移动文档的js
    ajax是怎么发请求的和浏览器发的请求一样吗?cookie
    linux命令
    mysql里的sql函数
    nginx启动
  • 原文地址:https://www.cnblogs.com/zhouhaocheng---yijianqinxin/p/12651636.html
Copyright © 2011-2022 走看看