使用makefile编译多个文件(.c , .cpp , .h等)
有时候我们要一次运行多个文件,这时候我们可以使用Makefile!!!
◊make是什么?
make是一个命令工具,是一个解释makefile中指令的命令工具。它可以简化编译过程里面所下达的指令,当执行 make 时,make 会在当前的目录下搜寻 Makefile (or makefile) 这个文本文件,执行对应的操作。make 会自动的判别原始码是否经过变动了,而自动更新执行档。
◊为什么要使用make?
假设,现在一个项目里面包含了100个程序文件,如果要对这个项目进行编译,那么光是编译指令就有100条。如果要重新进行编译,那么就又得像之前一样重新来一遍。这样重复且繁琐的工作实在是让我们很不爽啊。所以,用make来进行操作,间接调用gcc岂不是很方便?如果我们更动过某些原始码档案,则 make 也可以主动的判断哪一个原始码与相关的目标文件档案有更新过, 并仅更新该档案。这样可以减少重新编译所需要的时间,也会更加方便。
◊makefile又是干什么的?
makefile其实就是一个文档,里面定义了一系列的规则指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,它记录了原始码如何编译的详细信息! makefile一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
先看一下makefile的规则:
目标(target):目标文件1 目标文件2
<Tab>gcc -o 欲建立的执行文件 目标文件1 目标文件2
先举一个运行多个c语言文件。
首先下面是一个完整的 c语言文件,实现了统计用户输入的字符串中大小写字母的个数
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
void test(){
     char str[50]={0};
     scanf("%s",str);
    int m=0;
    int n=0;
    pid_t p=fork();
    if(p<0){
printf("fork failed");
    }
if(p == 0){
for(int i=0;i<sizeof(str);i++){
if( str[i]<='Z'&& str[i]>='A'){
                m++;
            }
       }
printf("大写字母一共有");
       printf("%d",m);
       printf("个");
    }
  if(p>0){
for(int i=0;i<sizeof(str);i++){
            if(str[i]>='a' && str[i]<='z'){
                n++;
            }
       }
           printf("小写字母一共有");
       printf("%d",n);
       printf("个");
    }
}
int main()
{
    test();
   return 0;
}
此时我们可以把该文件拆成三份,一份是.h文件,用来放头文件等信息,另外两个是.c文件,一个用来放main方法,一个放声明的函数,如下三图



则在终端进行一下操作

成功运行多个文件
下面介绍运行cpp文件,大致步骤相同。
一个 cpp文件写成多份的形式




稍微注意的就是gcc 和g++的使用。
使用makefile编译多个文件(.c , .cpp , .h等)的更多相关文章
- Makefile 编译静态库文件及链接静态库
		本文为原创文章,转载需指明该文链接 1.代码目录结构如下: comm/ comm/inc/apue.h 3 atexit.c Makefile 5 staticlib/lib/ staticlib ... 
- 利用caffe自带的Makefile编译自定义so文件
		1.文件目录结构 caffe-root |--include |--example |--modules |--test.h |--test.cpp |--python |--src |--tools ... 
- Makefile 编译动态库文件及链接动态库
		本文为原创文章,转载请指明该文链接 文件目录结构如下 dynamiclibapp.c Makefile comm/inc/apue.h comm/errorhandle.c dynamiclib/Ma ... 
- 头文件与cpp文件为什么要分开写
		最表面的机制是: 头文件是程序的界面(是代码界面),提供给程序员以 类.模版.函数等一系列的声明,让程序员知道应该怎么调用里面的"东西". 从动态链接库的角度看: 头文件提供界面 ... 
- Makefile 描述的是文件编译的相关规则,它的规则主要是两个部分组成,分别是依赖的关系和执行的命令 PHONY伪目标实践
		Makefile的工作流程 http://c.biancheng.net/view/7091.html Makefile文件是什么? 我们教程主要是讲的是 Makefile .很多 Linux(Uni ... 
- 多文件目录下makefile文件递归执行编译所有c文件
		首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的. 意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文 ... 
- 【转】多文件目录下makefile文件递归执行编译所有c文件
		首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的. 意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文 ... 
- 批量编译目录下文件的Makefile
		1.多C文件生成各自可执行文件的Makefile如果一个目录下有很多C文件,且每个C文件都能生成一个独立的可执行文件,那么想全编译这些C文件并生成各作的可执行文件,在该目录下编写一个Makefile文 ... 
- 解决Android Studio 2.2.3中添加.cpp .h文件在Project->Android无法显示,无法正常编译问题。
		搭配使用 Android Studio 2.2 或更高版本与 Android Plugin for Gradle 版本 2.2.0 或更高版本时,您可以将 C 和 C++ 代码编译到 Gradle 与 ... 
随机推荐
- 【linux】自动删除7天前的文件
			下面的脚本是删除/home目录下7天前的文件 #!/bin/bash -exec rm -f {} \; 把这个脚本保存在/tmp目录下,命名为:clearfile.sh 加入计划任务 crontab ... 
- Redis——慢查询分析
			核心知识点: 1.什么是慢查询? 2.客户端执行一条命令的步骤? 3.阈值和慢查询日志的设置? 4.慢查询日志的操作命令:slowlog get.slowlog len.slowlog reset. ... 
- PAT 甲级 1128. N Queens Puzzle (20) 【STL】
			题目链接 https://www.patest.cn/contests/pat-a-practise/1128 思路 可以 对每一个皇后 都判断一下 它的 行,列 ,左右对角线上 有没有皇后 深搜解决 ... 
- Carthage的使用
			1.安装Carthage https://github.com/Carthage/Carthage/releases 2.进入Cartfile文件所在的目录地址 cd 拖入文件Cartfile,把最后 ... 
- php基于swoole扩展的WebSocket
			php的swoole的扩展可以实现WebSocket通信,方法如下 1.php添加swoole扩展: 一:两种安装方式:1>编译安装:1>wget http://pecl.php.net/ ... 
- 微信公众号支付 redirect_uri 参数错误
			登录微信公众平台 1.配置 公众号设置-功能设置 JS接口安全域名 网页授权域名 2.配置 微信支付-开发配置 支付授权目录 测试授权目录 测试白名单 
- __builtin_constant_p(x) (转帖
			本文转载自:http://blog.chinaunix.net/uid-29254195-id-3977753.html gcc的内建函数,当x为常数时返回1, x为变量时返回0. 不过这并不完全准确 ... 
- LoadRunner监控图表与配置(三)对系统与网络资源进行监控
			1.Windows可监控的性能计数器 2.UNIX可监控的性能计数器 3.性能计数器信息说明 Windows 性能对象 计数器 数值说明 System %Total Processor Time 系统 ... 
- Python: scikit-image 图像的基本操作
			这个用例说明Python 的图像基本运算 import numpy as np from skimage import data import matplotlib.pyplot as plt cam ... 
- linux 几个逼格高实用的命令
			1.xargs [root@gdpsq1x25 log]# find . -type f -name "*.log" |sort -rn./yum.log./sssd/sssd_s ... 
