Makefile(c语言版)

2024-06-16 02:08
文章标签 makefile 语言版

本文主要是介绍Makefile(c语言版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

学习Makefile要抓住顺序:1.文件的依赖关系2.如何生成目标文件

目标文件:依赖文件

          生成目标文件的指令   

我这写了一个小程序加以加深理解:

#ifndef _ALL_H_
#define _ALL_H_int add(int a,int b);
int sub(int a,int b);
int mul(int a,int b);
int div(int a,int b);#endif

#include "all.h"int add(int a,int b)
{return (a+b);
}

#include "all.h"int sub(int a,int b)
{return (a-b);
}

#include "all.h"int mul(int a,int b)
{return (a*b);
}

#include "all.h"int div(int a,int b)
{return(a/b);
}

#include "all.h"
#include <stdio.h>int main(void)
{int x=2,y=1;printf("add:%d\n",add(x,y));printf("sub:%d\n",sub(x,y));printf("mul:%d\n",mul(x,y));printf("div:%d\n",div(x,y));return 0;
}

多个源文件用Makefile编译比较方便,有复杂到简单。

Makefile(1)

#makefile
cc=gcc
OBJ=main.o add.o sub.o mul.o div.o main:$(OBJ)$(cc) -o $@ $^
main.o:main.c all.h$(cc) -c $< 
add.o:add.c all.h$(cc) -c $<
sub.o:sub.c all.h$(cc) -c $< 
mul.o:mul.c all.h$(cc) -c $<
div.o:div.c all.h$(cc) -c $<clean:rm *.o
Makefile的常用变量:

$@ 表示是目标文件(main,main.o....)

$^表示所有依赖文件,至上往下的

$<表示生成目标的所需的依赖文件(遍历依赖文件)

深入理解了Makefile之后可以写成简单版的

#makefile
cc=gcc
OBJ=add.c sub.c mul.c div.c main.cmain:$(OBJ)$(cc) $^ -o $@ clean:rm *.o

Makefile一定要把最终要生成的目标放在最上面,比如main是我们的最终目标,而main需要依赖*.o文件,但是目录下没有*.o文件;而成成.o文件又需要相应的.c文件,就这样逐级递减,但一个一个条件满足,最后满足最终的目标文件,就如递归一样

这篇关于Makefile(c语言版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1065216

相关文章

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

Kernel 中MakeFile 使用if条件编译

有时需要通过if  else来选择编译哪个驱动,单纯的obj-$(CONFIG_)就不是很方便,下面提供两种参考案例: 案例一: 来源:drivers/char/tpm/Makefileifdef CONFIG_ACPItpm-y += tpm_eventlog.o tpm_acpi.oelseifdef CONFIG_TCG_IBMVTPMtpm-y += tpm_eventlog.o

【go语言发送电子邮件】go语言版发送电子邮件

一、实现功能 用go语言发送一封邮件 二、实现源代码 package mainimport ("net/smtp""fmt""strings")/** user : example@example.com login smtp server user* password: xxxxx login smtp server password* host: smtp.example.co

《数据结构(C语言版)第二版》第八章-排序(8.2-插入排序)

【8.2插入类、8.3交换类、8.4选择类、8.5归并类、8.6分配类 都属于内部排序。 】 8.2 插入排序 8.2.1 直接插人排序 【算法特点】 (1)稳定排序。 (2)算法简便,且容易实现。 (3)也适用于链式存储结构,只是在单链表上无需移动记录,只需修改相应的指针。 (4)更适合于初始记录基本有序(正序)的情况。 当初始记录无序,n较大时,此算法时间复杂度较高,不宜采用。 #in

Makefile问答之02 预处理器与宏

GCC Makefile中,怎样设定预处理器名称 在 GCC 的 Makefile 中,预处理器(preprocessor)的名称通常是 cpp(C PreProcessor),但在实际的 Makefile 中,我们一般是通过 gcc 命令来调用预处理器,而不是直接调用 cpp。不过,你可以通过设置 CPP 变量来显式指定预处理器名称和选项。以下是如何在 Makefile 中进行设置和使用的

如何在linux下写makefile

Windows下用集成开发环境(IDE)开发程序时不会涉及到编译、链接的步骤,集成开发环境已经把这些工作给你集成好了,你要做的就是根据语言的语法来编写代码。所以Windows下开发程序对makefile会有点生疏。         makefile的作用也是把你编写好之后的源文件进行编译与链接,只是它这个过程需要你自己去指定编译与链接的文件。 makefile的基本格式如下: tar

《数据结构(C语言版)第二版》第七章-查找(算法设计题)

习题1 试写出折半查找的递归算法。 #include <stdio.h>#include <stdlib.h>#define Maxsize 100typedef int KeyType;typedef char InfoType;typedef struct{KeyType Key;InfoType OtherInfo;}elem;typedef struct{elem *R;in

Makefile函数

定义$(函数名 参数)  或  ${函数名 参数} 例如: $(wildcard PATTERN) wildcard函数作用是列出所有PATTERN的文件 ,这里该参数可以是用通配符 例如*.c,就代表列出所有以.c结尾的文件。 $(patsubst <pattern>,<replacement>,<next>) patsubst函数作用是查找next中的单词,是否满足pattern的模式

记录下Makefile

把Makefile记录下,以后别忘了。 #CC = aarch64-linux-gnu-gcc#AS = aarch64-linux-gnu-as#AR = aarch64-linux-gnu-arCC = gccAS = asAR = arPROGRAMS =mainCUR_DIR = $(shell pwd)SRCS = $(CUR_DIR)/srcINCS = $(CUR_D