关于Makefile的基本规则:Linux基础-Makefile的编写
题目:
根据要求编写Makefile文件,有5个文件分别是
main.c
、visit.h
、study.h
、visit.c
、study.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)