Makefile练习题

文章目录


《跟我一起写 Makefile(陈皓)》参考资料: https://blog.csdn.net/Sudley/article/details/93919227

test1


test1测试代码包下载地址
https://download.csdn.net/download/sudley/11264717


要求编写Makefile文件进行编译,输出test可执行文件。test文件由目录下main.c文件、func.h文件和test*.c…文件组成。要求在源码目录下执行make成功可执行文件test,执行test输出对应内容,执行make clean删除所有make生成的文件。
main.c

#include <stdio.h>
#include "func.h"

int main(void)
{
        test1();
        test2();
        test3();
        test4();
        test5();
        test6();
        test7();
        printf("Good job!\n");
        return 0;
}

func.h

#ifndef FUNC_H
#define FUNC_H

void test1(void);
void test2(void);
void test3(void);
void test4(void);
void test5(void);
void test6(void);
void test7(void);

#endif

test1.c
其他test文件内容相似

#include <stdio.h>

void test1(void)
{
        printf("I ");
}

运行结果展示
在这里插入图片描述
Makefile参考
这种写法test1.c修改的话只需要重新编译test1.o和main.o,其他test*.o文件不需要重新编译

obj = main.o test1.o test2.o test3.o test4.o test5.o test6.o test7.o
test : $(obj)
        cc -o test $(obj)
main.o : main.c func.h

clean:
        rm -rf *.o test

-M参数自动生成依赖

obj = main.o test1.c test2.c test3.c test4.c test5.c test6.c test7.c
test : $(obj)
        cc -M main.c
        cc -o test $(obj)

clean:
        rm -rf *.o test

不会生成.o文件的版本,这种写法的话只要任意一个test修改了都需要全量编译

obj = main.c test1.c test2.c test3.c test4.c test5.c test6.c test7.c
test : $(obj)
        cc -o test $(obj)

clean:
        @rm -rf *.o test

test2


test2测试代码包下载地址
https://download.csdn.net/download/sudley/11264868


test1只是让大家简单了解一下Makefile的工作原理,实际编译工程往往要复杂的多,所以我们在test1的基础上进行level up。将源码和头文件放到不同的目录下,头文件放到include目录,c代码放在src目录且包含子目录。
在这里插入图片描述
要求编写Makefile,编写后目录如下
在这里插入图片描述
当执行make时生成build目录,目录结构类似src目录并生成对应c文件的.o文件和test可执行文件
在这里插入图片描述
执行make install则将test文件拷贝到当前目录
在这里插入图片描述
执行make clean删除所有编译文件,返回到执行make之前的状态
在这里插入图片描述
变量定义建议使用:=而不是直接用=,用=能够使用后面定义的变量,而:=定义的变量右边的值只能是之前定义的
参考Makefile:
以下是我写的两个重要Makefile文件,若发现错误或者有更好的方法欢迎在评论区留言,Thanks♪(・ω・)ノ

export Top:=${shell pwd}
export Src:=$(Top)/src/
export Include:=$(Top)/include/
export Build:=$(Top)/build/

all:
        @$(MAKE) -C $(Src)

install:
        @cp $(Build)/test $(Top)

clean:
        @-rm -rf $(Build) $(Top)/test
all:main.o test4.o
        @mkdir -p $(Build)
        @mv *.o $(Build)
        $(MAKE) -C $(Src)/dir1
        $(MAKE) -C $(Src)/dir2
        $(CC) -o $(Build)/test $(Build)/*.o $(Build)/dir1/*.o $(Build)/dir2/*.o
main.o : $(Include)/func.h
        $(CC) -c main.c -I$(Include)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值