单文件夹下的C程序如何编写Makefile文件
通过学习已经学会了GCC的一些基础的命令,以及如何将C语言源代码编译成可执行文件。
我们已经知道在linux环境下编译源码时,常会有以下三个步骤:
./configure
make
make clean
执行./configure时,会检查系统的配置等,得到相关的有用的信息,生成Makefile文件。
执行make命令时,make命令解释Makefile文件中的规则,生成目标文件。
执行make clean会删除生成目标文件过程中的生成的中间文件。
Makefile文件是可以由我们手工建立的:接下来是编写在同一个文件夹下的程序的Makefile文件。
文件有compute.c与m.h,代码如下:
//compute.c
#include<stdio.h>
#include"m.h"
int main(){
int a=,b=;
printf("a+b=%d\n",add(a,b));
printf("a*b=%d\n",multi(a,b));
return ;
}
//m.h
int add(int a,int b){
int c;
c = a+ b;
return c;
} int multi(int a, int b){
int c=a*b;
return c;
}
编写的Makefile文件如下:
#makefile
objects=compute.o
CC=@gcc #如果没有@符号,gcc的命令就会输出到终端
CPP=@gcc -c #如果有@符号,gcc的命令就不会输出到终端 compute:$(objects)
$(CC) -o compute $(objects) #标准写法
compute.o:compute.c m.h
$(CPP) compute.c #简写形式;
#make自动推导 因为要生成.o文件,就需要相关联的compute.c文件,
#make会自动生成gcc -c compute.c的命令
#compute.o:m.h clean:
@rm compute $(objects)
接下来,执行make命令,就会生成compute.o文件与可执行文件compute.
$ ls -l
总用量
-rw-r--r-- qi qi 5月 : compute.c
-rw-r--r-- qi qi 5月 : Makefile
-rw-r--r-- qi qi 5月 : m.h
$ make
$ ls -l
总用量
-rwxr-xr-x qi qi 5月 : compute
-rw-r--r-- qi qi 5月 : compute.c
-rw-r--r-- qi qi 5月 : compute.o
-rw-r--r-- qi qi 5月 : Makefile
-rw-r--r-- qi qi 5月 : m.h
执行make clean会按照Makefile文件中的伪目标clean,对文件进行删除操作。
$ make clean
$ ls -l
总用量
-rw-r--r-- qi qi 5月 : compute.c
-rw-r--r-- qi qi 5月 : Makefile
-rw-r--r-- qi qi 5月 : m.h
单文件夹下的C程序如何编写Makefile文件的更多相关文章
- 如何将Debug文件夹下的资源打包成一个EXE文件直接执行
前言:前段时间写了个小程序,想分享给好友看看,可所以资源都放在Debug文件夹下,整个文件夹发给人家这也太……,为了显得稍微专业一点,想把它们打包一个EXE文件执行,因为我见到到这样的程序,直接一个E ...
- webform工程中aspx页面为何不能调用appcode文件夹下的类(ASP.NET特殊文件夹的用法)
App_code 只有website类型的工程才有效. App_Code 下创建的.cs文件仅仅是“内容”不是代码.你设置那个文件为“编译”就行了. 其他特殊文件夹 1. Bin文件夹 Bin文件夹包 ...
- 使用C#创建winform窗体,修改debugwen文件夹下exe应用程序的默认图标
在做一个接口程序是遇到的问题,记录一下: 在解决方案资源管理器上,右击项目名称——属性——点击图标和清单右边的的按纽——去Debug文件夹中找到自己的图标,打开.然后保存.
- 动手动脑---找出指定文件夹下所有包容指定字符串的txt文件
思路:先判断是否为文件,如果是文件,则需要判断改文件名是否包含字符串"txt",包含则输出.如果是文件夹的话,先需要判断文件名是否包含".txt"(因为文件名也 ...
- C# 列出并删除一个文件夹下的所有MD5值相同的文件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- C++ 获取文件夹下的所有文件名
获取文件夹下所有的文件名是常用的功能,今天再一次有这样的需求,所有就在网上查找了很多,并记下以供后用. 原文:http://blog.csdn.NET/cxf7394373/article/detai ...
- [转]C++ 获取文件夹下的所有文件名
转自http://www.cnblogs.com/fnlingnzb-learner/p/6424563.html 头文件:#include<io.h> char * filePath = ...
- 将java的class文件放到一个指定文件夹下
用javac执行java文件时,要把java文件的class文件放到指定文件夹下,注意文件夹要创建好,执行javac -d 文件夹 ***.java 如图: 在class文件夹下就出现了L的class ...
- 转载: C++ 获取文件夹下的所有文件名
最近需要得到某个文件夹下所有文件名,于是就上网上查了查,得到如下的解决方案最多: 而且查到的最早的版本是这个:http://blog.csdn.net/cxf7394373/article/detai ...
随机推荐
- node.js 入门
什么是Node.js?还服务器端javascript?对于这个概念我在这篇文章不做解释,可以自己去搜索了解下,服务器端js不是新技术,只是最近的node.js的火爆让他爆发了,我会在以后的文章里解释什 ...
- iOS 。开发之指纹识别功能
// 头文件导入 #import <LocalAuthentication/LocalAuthentication.h> //在iPhone5s的时候,苹果推出了指纹解锁.但是在ios8. ...
- 编译Hadoop1.1.2eclipse插件并测试
(一).building hadoop 1.编辑{HADOOP_HOME}/build.xml (1).对31行的hadoop版本做修改 <property name="version ...
- cocos2d-x 游戏优化方案
优化的方案: 引擎底层优化.纹理优化.渲染优化.资源缓存.内存优化. 纹理优化: cocos2d-x 底层是OPenGL ES实现的. 对于图案片载入的内存是2的幂次方. 使用的图片是100*128 ...
- 基于Boost无锁队列实现的内存池
- C语言结构体数组内带字符数组初始化和赋值
1.首先定义结构体数组: typedef struct BleAndTspRmtCmd{ char terminal[3]; char note[3]; char rmtCmd[10]; char c ...
- 【题解】CF611H New Year and Forgotten Tree
[题解]CF611H New Year and Forgotten Tree 神题了... 题目描述 给定你一棵树,可是每个节点上的编号看不清了,只能辨别它的长度.现在用问号的个数代表每个节点编号那个 ...
- Ubuntu 14.04上安装WineTMQQ2013麒麟版
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/tao_627/article/details/24187699 我先后试用了longterm团队的2 ...
- slf4j和log4j结合使用步骤
使用slf4j的优点: 提供带参数的日志输出方法(SLF4J 1.7及以后版本). pom中只需引入slf4j-log4j12,然后maven会引入它所依赖的其它JAR包. slf4j和log4j结合 ...
- zabbix-2.4.8-1添加tcp状态监控
1.安装zabbix-agentyum -y install zabbix-2.4.8-1.el6.x86_64.rpm zabbix-agent-2.4.8-1.el6.x86_64.rpm2.编辑 ...