单文件夹下的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 ...
随机推荐
- 【动态规划】skiing
[动态规划]skiing 时间限制: 1 Sec 内存限制: 128 MB提交: 34 解决: 15[提交][状态][讨论版] 题目描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激. ...
- hadoop集群加入新节点hhbase调试
一.改动vi /etc/hosts 添加节点ip.(没个节点都要加入 ) 二.设置hostname vi /etc/sysconfig/network 把hostname改为nod ...
- 【BZOJ4974】字符串大师 KMP
[BZOJ4974]字符串大师 Description 一个串T是S的循环节,当且仅当存在正整数k,使得S是T^k(即T重复k次)的前缀,比如abcd是abcdabcdab的循环节.给定一个长度为n的 ...
- 爬虫实战【4】Python获取猫眼电影最受期待榜的50部电影
前面几天介绍的都是博客园的内容,今天我们切换一下,了解一下大家都感兴趣的信息,比如最近有啥电影是万众期待的? 猫眼电影是了解这些信息的好地方,在猫眼电影中有5个榜单,其中最受期待榜就是我们今天要爬取的 ...
- C - Dungeon Master
C - Dungeon Master Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u ...
- python系列十二:python3模块
#!/usr/bin/python # This Python file uses the following encoding: gbk #Python3 模块 '''用 python 解释器来编程 ...
- exe4j中"this executable was created with an evaluation version of exe4j"
在使用exe4j时,如果您的exe4j没有注册,在运行有exe4j转换的*.jar为*.exe的可执行文件是会提示:"this executable was created with an ...
- setlocale同mbstowcs函数的关系(VS2008下setlocale(LC_ALL, "chs")可以执行成功,BCB使用setlocale(LC_ALL, "Chinese (Simplified)_People's Republic of China"),linux上locale别名表大概在 /usr/lib/X11/locale/locale.alias)
序中,如果要将ASCII码字符串转换为宽字符(Unicode),可以利用标准C的mbstowcs函数. 微软在MSDN中有示例,如下: 然而,这段代码在处理含有汉字的字符串时就会出现问题.比如将: w ...
- 数据库垂直拆分,水平拆分利器,cobar升级版mycat(转)
原文:数据库垂直拆分,水平拆分利器,cobar升级版mycat 1,关于Mycat Mycat情报 基于阿里的开源cobar ,可以用于生产系统中,目前在做如下的一些改进: 非阻塞IO的实现,相对于目 ...
- python函数回顾:next()
描述 next() 返回迭代器的下一个项目. 语法 next(iterator[, default]) 参数说明: iterator -- 可迭代对象 default -- 可选,用于设置在没有下一个 ...