makefile的简单用法
对于makefile的详细描述,其实网上已经有很多了,但是一看每个都是那么复杂,顿时有点望而生畏,所以这里就真的仅仅是简单的介绍一下makefile的使用,十分钟即可了解如何编译简单的cpp文件。
makefile的格式:
target:dependency_files ##生成target所需要的所有dependency_files
command #注意是一个TAB
例子:
hello.o:hello.c hello.h
gcc -c hello.c -o hello.o
在没有编写makefile之前可以使用命令gcc *.c -Wall
查看当前代码是否有语法错误
head.h:
void print1();
void print2();
f1.c:
#include <stdio.h>
void print1(){
printf("Message:f1\n");
}
f2.c:
#include <stdio.h>
void print2(){
printf("Message:f2\n");
}
main.c:
#include <stdio.h>
#include "head.h"//调用自己写的头文件用引号
int main() {
print1();
print2();
printf("end main\n");
return 0;
}
新建makefile文件并输入以下内容
test:f1.o f2.o main.o
gcc f1.o f2.o main.o -o test
f2.o:f2.c
gcc -c -Wall f2.c -o f2.o# -Wall允许发出gcc所有有用的报警信息
f1.o:f1.c
gcc -c -Wall f1.c -o f1.o#-c表示只编译不链接,生成目标文件“.o”
main.o:main.c
gcc -c -Wall main.c -o main.o#-o file表示把输出文件输入到file里
clean: rm *.o test#删除.o和执行文件
执行makefile文件:
$ make 默认生一个文件
$ make ‘目标名‘ #选择性的编译,比如make f1.o就只编译那一部分
当工程中的文件名和makefile中的目标重名时,就会有伪目标. 执行make
命令时会发现提示目标文件已经是最新将不被执行! 因为make命令只编译改动的代码文件,而不用完全编译. 如果想让makefile中某个命令永远被执行可以在目标名前加上.PHONY:‘目标名‘
小插曲:
解决centos共享文件夹消失问题:(要在root视角下)
- 一般情况下共享文件夹在/mnt/hgfs文件夹下
- 首先前往Linux的/mnt/hgfs文件下(若没有就创建一个)
cd /mnt/hgfs
- 查看是否共享成功
vmware-hgfsclient
- 安装open-vm-tools并挂载(确保在此之前安装了VMtools)
yum install open-vm-tools vmhgfs-fuse .host:/ /mnt/hgfs
- over
QT登场
但是呢,大型工程我不用makefile了,因为之前我已经下好了QT并且配置好了环境。啧啧,果然,QT就是好用。
接下来借鉴 的文章来介绍一下QT的安装吧!
如何使用QT呢?
首先打开需要运行的工程的目录,只有.cpp和.h文件,如图所示:
然后运行Terminal,输入
qmake -project
此时可以查看一下目录,它多了什么。
然后再输入
qmake
可再查看一次目录
然后输入
make
此时查看目录就会发现,诶?出现了一个没有后缀的文件。直接./文件名就能直接运行。
这个test.cpp为输出当前系统时间:
#include <iostream>
#include "test.h"
#include <ctime>
#include <string>
using namespace std;
int main(){
time_t timep;
time(&timep);
char tmp[64];
strftime(tmp,sizeof(tmp),"%Y-%m-%d %H:%M:%S",localtime(&timep));
string time=tmp;
cout<<time;
return 0;
}
执行结果为:
另外,在文章里插个图片怎么这么费劲呢!有道云笔记也不能直接进行分享。反人类的功能设计!!!再见,浪费时间。