如何用makefile编译多个c文件

如何用makefile编译多个c文件,第1张

假设有下面几个c++文件

wherewhen.h wherewhen.c

countdown.h countdown.c 包含了math.h, 需要连接库文件

main.c 主函数, main.c 包含了两个头枯卜文件 wherewhen.h and countdown.h

1、第一种编译方法:

g++ -Wall -g wherewhen.c countdown.c main.c -lm -o myprogram

生成可执行文件myprogram

2、没缺穗第二中编译方法,扮档 分别编译各个文件:

g++ -Wall -g -c wherewhen.c

g++ -Wall -g -c countdown.c

g++ -Wall -g -c main.c

g++ -g wherewhen.o countdown.o main.o -lm -o myprogram

1、先写Makefile编译出***.ko文件

模板如猛凯下,保存到命名为Makefile文件陵知游里,放到你代码的同级目录下

TARGET=my_proc.ko

LINUXDIR=/lib/modules/$(shell uname -r)/build

PWD=$(shell pwd)

obj-m :=

obj-m += my_proc.o

all: $(TARGET)

$(TARGET): $(OBJS)

make -C $(LINUXDIR) SUBDIRS=$(PWD) modules

clean:

rm -f modules.order Module.symvers $(TARGET) *.mod.c *.o

rm -rf .tmp_versions .mod* Module.markers

2、make

3、root权限下用命令插入模尺销块

insmod my_proc.ko

4、可以用你写的应用程序打开、 *** 作模块了

5、查看模块命令

lsmod

cat /proc/modules

modinfo my_proc.ko

6、root下卸载模块

rmmod

vi Makefile #打开vi编辑器

在编辑器里输入以下内容:

#当只有一个文件需要编译的时候

finame:filename.c #冒号前面是要编译成的目标文件(可以任意命名),后面是你编写的C文件

gcc -o filename filename.c #gcc前面是按Tab制表符

#filename:filename.c 是指filename文件的生成要依赖filename.c文件

#然后换行后按Tab键,然后编写编译规则

#make命令一般是同时编译多个文件时才使用,以下是同时编写多个独立的C文件

#filename1和filename2……没有依赖关系

filename1:filename1.c

gcc -o filename1 filename1.c

filename2:filename2.c

gcc -o filename2 filename2.c

#makefile编译多个需要依赖(互相调用的文件)

main:main.o file1.o file2.o #main是最终要生成的目标文件,后面.o就是需要喊槐颂调用的文件的对象文件

main.o:main.c

gcc -c main.c #生成main.o对象文件,main.c里面是有主函数的

file1.o:file1.c

gcc -c file1.c

file2.o:file2.c

gcc -c file2.c

#以上差不多就可以用了

#一下是我找的例子

#include "mytool1.h"

void mytool1_print(char *print_str)

{

printf("This is mytool1 print %s\n",print_str)

}

/* mytool2.h */

#ifndef _MYTOOL_2_H

#define _MYTOOL_2_H

void mytool2_print(char *print_str)

#endif

/郑郑* mytool2.c */

#include "mytool2.h"

void mytool2_print(char *print_str)

{

printf("This is mytool2 print %s\n",print_str)

}

当然由于这个程序是很短的我们可以这样来编译

gcc -c main.c

gcc -c mytool1.c

gcc -c mytool2.c

gcc -o main main.o mytool1.o mytool2.o

这样的话我们也可以产生main 程序,而且也不时很麻烦.

# 这是上面那个程序的Makefile 文件

main:main.o mytool1.o mytool2.o

gcc -o main main.o mytool1.o mytool2.o

main.o:main.c mytool1.h mytool2.h

gcc -c main.c

mytool1.o:mytool1.c mytool1.h

gcc -c mytool1.c

mytool2.o:mytool2.c mytool2.h

gcc -c mytool2.c

有了这个Makefile 文件,不过我们什么时候修改了源程序当中的什么文件,我们只要执行

make 命令,我们的编译器都只会去编译和我们修改的文件有关的文件,其它的文件她连理

都不想去理的。

下面我们学习Makefile 是如何编写的。

在Makefile 中也#开始的行都是注释行.Makefile 中最重要的是描述文件的依赖关系的说

明.一般的格式是:

target: components

TAB rule

第一行表示的是依赖关系.第二行是规则.

比如说我们上面的那个Makefile 文件的第二行

main:main.o mytool1.o mytool2.o

表示我们的目标(target)main 的依赖对象(components)是main.o mytool1.o mytool2.o

当倚赖的对象在目标修改后修改的话,就要去执行规则一行所指定的命令.就象我们的上

面那个Makefile 第三行所说的一样要执行 gcc -o main main.o mytool1.o mytool2.o

注意规则一行中的TAB 表示那明慧里是一个TAB 键


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12143338.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存