Linux中makefile的极为简单的应用

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视角下)

  1. 一般情况下共享文件夹在/mnt/hgfs文件夹下
  2. 首先前往Linux的/mnt/hgfs文件下(若没有就创建一个)
    cd /mnt/hgfs
  3. 查看是否共享成功
    vmware-hgfsclient
  4. 安装open-vm-tools并挂载(确保在此之前安装了VMtools)
    yum install open-vm-tools vmhgfs-fuse .host:/ /mnt/hgfs
  5. 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;  
}

执行结果为:

另外,在文章里插个图片怎么这么费劲呢!有道云笔记也不能直接进行分享。反人类的功能设计!!!再见,浪费时间。

posted @ 2020-08-29 19:52  梅落南山  阅读(202)  评论(0编辑  收藏  举报