之前一直使用集成开发环境,如VS、CLion等(CLion比较人性化,最爱它的调试功能,可以在程序中看到当前的变量值,推荐)。但是既然走C++这条路,就要了解Linux下的C++编程,所以学习了一下。
在面临多个文件需要同时编译运行的情况,就需要借助makefile了。
在网上看了很多博客,看了半天,终于,终于成功了!但是有好多只是列举了一些参数功能,有些讨论的过于高深,不适合我这种刚入门的小白,所以这里记录一下,方便后面自己忘记了查看,也希望帮助和我一样的小白,至少先尝试编译运行成功。至于其他的知识,后面再了解。
- 准备好要编译运行的文件,我这里有一个类模板文件
array.hpp
和一个main.cpp
,还有创建的一个makefile
文档(这里说一下,刚开始我以为这个makefile是什么软件自动生成的,以为很高大上,其实就是自己新建的一个文件,)
关于makefile
文件的创建可以在工程目录文件夹下,执行这条命令:(gedit是文档编辑的工具,其实换成vim也可以)
gedit makefile&
- 编辑makefile文件
mm:main.o
g++ main.o -o mm
main.o:main.cpp
g++ -c main.cpp -o main.o
clean:
rm *.o
1)第一行的mm,当它是一个标志,可以随便定义;这里只输出了main.o
,因为array.hpp
作为一个头文件已经包含进了main.cpp
中,所以不需要输出array.o
。但是如果你的工程文件中还有其他cpp文件,就需要输出.o
文件。
2)第二行,注意g++前面是一个Tab
键! 这里的mm,表示最后输出的运行文件叫mm。
3)第三行,就是定义main.o
的来源,这个和单个文件编译时语法相同;注意,若有多个cpp文件,需要继续添加类似的语句。
4)最后,是清除操作的一些规则,这里表示清除所有以.o
为后缀的文件,也就是在这里你可以设定需要清除的中间文件。
- 执行命令:
make -f makefile
然后就可以看到工程文件夹中多出了一些以.o
为后缀的文件,这些就是我们之前定义输出的文件;
结果:
- 清除中间文件:
make clean
注意:前面的makefile文件中,定义的是clean的规则,按理说应该自动清除这些中间文件的,但是我运行下来并没有,看到一篇博客说需要手动删除,所以需要执行make clean。
博客地址:makefile中删除不掉*.o文件的问题