首先需要知道我们用到的三种文件:
1、.cpp这是c++的源文件,源码。
2、.h头文件,包含需要用到的所有cpp文件
3、.o文件,生成的可执行文件。
这三个小代码上传到github主页:study_collection/makefile at main · stu-yzZ/study_collection (github.com)
目录
我们有三个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文件 便会输出打印结果
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文件。这是默认名称,然后执行该文件即可得到输出。