通过头文件和makefile编译多个cpp文件

本文介绍了C++源文件(.cpp),头文件(.h)以及编译过程,包括通过头文件编译和使用Makefile/CMake进行编译。详细讲解了如何通过`g++`命令结合头文件和多个cpp文件创建可执行文件,并展示了Makefile的不同版本和执行方法。
摘要由CSDN通过智能技术生成

首先需要知道我们用到的三种文件:

1、.cpp这是c++的源文件,源码。

2、.h头文件,包含需要用到的所有cpp文件

3、.o文件,生成的可执行文件。

这三个小代码上传到github主页:study_collection/makefile at main · stu-yzZ/study_collection (github.com)

目录

一、文件描述

二、通过头文件编译

三、通过cmake文件编译


一、文件描述

我们有三个cpp文件,一个头文件。需要注意的是这四个文件都在同一个目录下。

下面代码是三个cpp文件代码。

#第一个主文件 main
#include <iostream>
#include "head.h"

using namespace std;

int main()
{
   fun1();
   fun2();

   cout<<"this is main function"<<endl;
   return 0;
};


#第二个函数文件 function1
#include <iostream>
#include "head.h"

using namespace std;

void fun1()
{
    cout<<"this is fun1 function"<<endl;
    return;
}


#第二个函数文件 function2
#include <iostream>
#include "head.h"
using namespace std;

void fun2()
{
    cout<<"this is fun2 function"<<endl;
    return;
}

下面是头文件代码,需要和上面三个cpp文件名对应起来。

#头文件
#ifndef _FUNCTIONS_H_
#define _FUNCTIONS_H_
void fun1();
void fun2();
#endif

二、通过头文件编译

首先确保四个文件书写正确。

编译命令:

g++ main.cpp function1.cpp function2.cpp -o main #将三个文件编译并连接为一个main文件

ls # 查看当前目录的文件,可以看到多了一个main文件 

./main #执行main文件 便会输出打印结果

三、通过cmake文件编译

1、首先构建Makefile文件(直接将该文件命名为Makefile

下面是Makefile代码,代码插进去没能识别注释,我把截图放在下面

#version1
hello :main.cpp function1.cpp function2.cpp #create file named hello which depend on these three cpp file
	g++ main.cpp function1.cpp function2.cpp #注意前面是个tab不是space


#version2
# CXX = g++
# TARGET = hello
# OBJ = main.o function1.o function2.o

# $(TARGET): $(OBJ) #TARGET depends on OBJ
# 	$(CXX) -o $(TARGET) $(OBJ)

# main.o: main.cpp
# 	$(CXX) -c main.cpp

# function1.o: function1.cpp
# 	$(CXX) -c function1.cpp

# function2.o: function2.cpp
# 	$(CXX) -c function2.cpp


#version3
# CXX = g++
# TARGET = hello
# OBJ = main.o function1.o function2.o

# CXXFLAGS = -c -Wall
# $(TARGET): $(OBJ) #TARGET depends on OBJ
# 	$(CXX) -o $@ $^

# %.o: %.cpp
# 	$(CXX) $(CXXFLAGS) $< -o $@

# .PHONY: clean
# clean:
# 	rm -f *.o $(TARGET)




这里面有三个版本的makefile文件。对第一个版本进行说明,

版本一:

#version1
hello :main.cpp function1.cpp function2.cpp #create file named hello which depend on these three cpp file
	g++ main.cpp function1.cpp function2.cpp

以上代码可以理解为:

第一行:要生成hello文件,依赖于这三个cpp源文件。

第二行:使用g++命令编译这三个文件。

到此makefile文件生成完成。接下来使用make命令执行makefile文件

make #直接输入make便可执行该makefile文件

或者

make -f makefile 

输出结果如下图:

第一行是使用g++编译这三个cpp文件,然后使用ls查看可以发现多出来一个a.out文件。这是默认名称,然后执行该文件即可得到输出。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux内核,通常有许多头文件和源文件需要编译成.ko(内核对象)文件,以实现对特定功能或驱动程序的支持。 首先,头文件包含了函数和数据结构的声明,被其他源文件引用。这些头文件通常以.h文件扩展名结尾。源文件则包含了函数和数据结构的实现,通常以.c或.cpp文件扩展名结尾。 为了将多个头文件和源文件编译成.ko文件,使用Makefile是一个常见的方法。Makefile是一个文本文件,包含了一系列的规则,指定了文件的依赖关系以及编译和链接的命令。 Makefile的规则通常包括以下几个步骤: 1. 定义目标文件(.ko文件)的名称和相关的编译选项。 2. 定义依赖关系,即指定哪些源文件头文件需要进行编译。 3. 定义编译命令,通常使用gcc或其他编译器执行编译操作。例如,可以使用gcc -c命令将源文件编译成目标文件(.o文件)。 4. 定义链接命令,将所有目标文件链接成一个.ko文件。例如,可以使用gcc -o命令将所有目标文件链接成一个.ko文件。 在执行Makefile时,会根据规则的定义逐步执行编译和链接的操作,生成最终的.ko文件。同时,Makefile还可用于指定其他操作,例如清除文件或执行其他自定义操作。 总而言之,将多个头文件和源文件编译成.ko文件可以通过使用Makefile来定义编译和链接的规则,并将其作为输入参数传递给编译器。Makefile的规则会根据文件的依赖关系逐步执行编译和链接的操作,最终生成所需的.ko文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值