Makefile编写练习题

关于Makefile的基本规则:Linux基础-Makefile的编写

题目:

根据要求编写Makefile文件,有5个文件分别是main.cvisit.hstudy.hvisit.cstudy.c
具体代码如下:

//main.c
#include<stdio.h>
main()
{
    int i;
    printf("please input the value of i from 1 to 2:\n");
    scanf("%d",&i);
    if(i==1) visit();
    if(i==2) study();
}

//visit.c
#include<stdio.h>
void visit()
{
    printf("visit friend today\n");
}

//study.c
#include<stdio.h>
void study()
{
    printf("study embedded system today\n");
}

//visit.h
void visit();

//study.h
void study();

(1)如果上述文件在同一目录,请编写Makefile文件,用于生成可执行程序zhs。

这个简单,首先我们创个文件夹,把我们在windows下写好的五个文件放进去(你也可以在linux下写)。
在这里插入图片描述
放进去后,开始编写Makefile文件,具体代码如下

zhs:main.o visit.o study.o
	gcc main.o visit.o study.o -o zhs
main.o:main.c visit.h study.h
	gcc -c main.c -o main.o
visit.o:visit.c visit.h
	gcc -c visit.c -o visit.o
study.o:study.c study.h
	gcc -c study.c -o study.o
clean:
	rm -rf *.o zhs

编写完了,当前目录下执行make,验证一下
在这里插入图片描述
在这里插入图片描述
没什么问题,最后清除一下 make clean

(2)如果按照下面的目录结构存放文件,请改写Makefile文件。
bin:存放生成的可执行文件 
obj:存放.o文件 
include:存放visit.h、study.h 
src:存放main.c、visit.c、study.c和Makefile.

第二问呢,首先我们先按照题目的意思,把文件分类
include:存放visit.h、study.h
src:存放main.c、visit.c、study.c和Makefile
执行命令,把他们移动过去
sudo mv visit.h study.h /usr/include/
sudo mv main.c visit.c study.c Makefile /usr/src/
然后我们根据题意来改写Makefile文件,需要注意一点,题上说obj:存放.o文件,但是在/usr/目录下,并没有obj目录,需要自己手动创建,Makefile修改后如下:

SRC_DIR=.
INC_DIR=../include
OBJ_DIR=../obj
BIN_DIR=../bin

$(BIN_DIR)/zhs:$(OBJ_DIR)/main.o $(OBJ_DIR)/visit.o $(OBJ_DIR)/study.o
	gcc $^ -o $@
$(OBJ_DIR)/main.o:$(SRC_DIR)/main.c $(INC_DIR)/visit.h $(INC_DIR)/study.h
	gcc -c $< -o $@
$(OBJ_DIR)/visit.o:$(SRC_DIR)/visit.c $(INC_DIR)/visit.h
	gcc -c $< -o $@
$(OBJ_DIR)/study.o:$(SRC_DIR)/study.c $(INC_DIR)/study.h
	gcc -c $< -o $@
clean:
	rm -rf $(OBJ_DIR)/*.o $(BIN_DIR)/zhs

然后执行一下,注意,此时执行make需要sudo,不然权限不够
在这里插入图片描述
去bin目录下,执行一下,验证下没问题
在这里插入图片描述
清除目录(sudo)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1900_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值