makefile的编写

本文介绍了Makefile的基本编写方法及C++项目的编译流程。解释了如何避免源文件间的重定义问题,并通过具体示例展示了如何利用Makefile进行多文件编译。此外,还介绍了extern关键字的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.例子

这个代码中总共有三个,分别是test.h test.cpp main.cpp

main: main.o test.o
    g++ main.o test.o -o main

main.o: main.cpp test.h
    g++ -c main.cpp

test.o: test.cpp test.h
    g++ -c test.cpp

clean:
    rm *.o

2.编译过程的理解

(1)main.cpp文件中包含的是test.h文件,而不能够是test.cpp文件,否则会出现重定义的问题

(2)在编译的过程中,各个.cpp文件都要单独编译,假如main.cpp文件中包含test.cpp文件的话.则在main.cpp生成main.obj文件的过程中同时生成了test.obj文件.而test.cpp文件本身也是.cpp文件,所以也要单独编译,最后所有的.obj文件会连接到一起生成.exe文件,这时发现有两个test.obj文件,也就是出现了重定义

3.makefile的编写

(1)基于上面对编译过程的简单理解,makefile的编写就简单多了

main: main.o test.o
    g++ main.o test.o -o main

即在这份代码中总共有两个obj文件,分别是main.o 和test.o,最后这两个obj文件连接到一起生成了main(exe文件)
有两个obj文件是因为有两个.cpp文件

(2)

main.o: main.cpp test.h
    g++ -c main.cpp

test.o: test.cpp test.h
    g++ -c test.cpp

这里是对所有的obj文件进行编写,这里总共有两个obj文件,所以就是对main.o 和 test.o进行编写
main.cpp文件中包含有test.h文件
test.cpp文件中包含有test.h文件

(3)clean

clean:
    rm *.o

这个基本都可以这样写

(4)notice:

每一行开头用的应该是tab而不是空格

4.补充

对于重定义的问题,可以通过extern来解决

例子:

a.cpp:

int add(int numa, int numb) {
    return numa + numb;
}

b.cpp:

extern int add();
int main() {
    int a, b;
    cin >> a >> b;
    int result = add(a, b);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值