`
yanfaguanli
  • 浏览: 661160 次
文章分类
社区版块
存档分类
最新评论

使用makefile编译c程序

 
阅读更多

一、Makefile的规则

Makefile的规则如下:
target ... : prerequisites ...
command
这里的command是指生成或是处理target随执行的命令;prerequisites指的是生成target所需要依赖的文件.
二、一个示例
自行编写了2个C文件(get_max.c,fn_max.c),我们为了完成前面所述的那三个规则,我们的Makefile应该是下

面的这个样子的。
SHELL = /usr/bin/ksh
LINK.c = cc
get_max:get_max.o fn_max.o
<tab>cc -o get_max get_max.o fn_max.o
get_max.o:get_max.c
<tab>cc -c get_max.c
fn_max.o:fn_max.c
<tab>cc -c fn_max.c
clean:
<tab>rm get_max.o fn_max.o

我们可以把这个内容保存在文件为“Makefile”或“makefile”的文件中,然后在该目录下直接输入命令“make”

就可以生成执行文件get_max.。如果要删除执行文件和所有的中间目标文件,那么,只要简单地执行一下

“make clean”就可以了。
三、makefile中使用变量
比如,我们声明一个变量,叫objects,在makefile一开始就这样定义:
objects=get_max.o fn_max.o
于是,我们就可以很方便地在我们的makefile中以“$(objects)”的方式来使用这个变量了,于是我们的改良版

makefile就变成下面这个样子:

SHELL = /usr/bin/ksh
LINK.c = cc

objects=get_max.o fn_max.o
get_max:${objects}
<tab>cc -g -o get_max ${objects}
fn_max.o:fn_max.c
<tab>cc -c fn_max.c
clean:
<tab>rm ${objects}
于是如果有新的 .o 文件加入,我们只需简单地修改一下 objects 变量就可以了。

分享到:
评论

相关推荐

    MAKEFILE 一键编译所有源程序

    一键编译所有C源程序 makefile编写,非常简单的例子

    opencv下一键编译程序的Makefile

    有多个头文件和传文件的opencv小伙伴可以使用本Makefile。只需要将所有的c/c++文件和头文件放在同一个文件下makefile就可以自己去找依赖,前提是opencv安装成功而且配置好环境,如果没配置好文件的请参考我的另外一...

    Makefile基础与实战编译大型C-C++项目

    │ 1动手编写第一个makefile编译c++多文件项目 │ 2g++分步编译演示从源码到执行程序的四步 │ 3makefile运行流程分析并使用变量改写项目 │ 4makefile自动推导目标代码配置和伪目标clean清理 │ 5使用make编译动态...

    嵌入式用的2440上的i2c驱动源代码和Makefile编译文件和测试程序源代码

    嵌入式用的2440上的i2c驱动源代码和Makefile编译文件和测试程序源代码

    如何在Android下编译C程序

    Android 编译环境本身比较复杂,且不像普通的编译环境:只有顶层目录下才有Makefile 文件,而其他的每个 component 都使用统一标准 Android.mk. Android.mk 文件本身是比较简单的,不过它并不是我们熟悉的 Makefile,而是...

    Linux用Makefile编译C代码

    在Linux里写C语言代码一般用gcc编译,如果是一些小的程序可以使用gcc命令编译,但是当我们写一个大的项目的时候,我们总会把头文件,主函数,子函数等分别放到一个文件里,这样可以让代码看起来没有那么长,在排错的...

    嵌入式i2c驱动源代码和Makefile编译文件源代码和相应的应用层测试程序源代码

    嵌入式i2c驱动源代码和Makefile编译文件源代码和相应的应用层测试程序源代码

    文件编译时出现multiple definition of ‘xxxxxx’的具体解决方法

    问题:原来有单个文件tcpclient.c,运行gcc -o tcpclient tcpclient.c可以顺利完成编译,并能与... 但是,使用Makefile来编译,总是出现如下multiple definition of类的错误: 代码如下:dingq@u1110-120628:~/hwsvn/2s

    LINUX下多个c程序编译链接的程序

    LINUX下多个c程序编译链接的程序,经验证可以执行,并搭配了MAKEFILE文件

    gcc使用的参数实例演示编译c程序过程

    其中涉及到5个文件:(1)6.sh为由一个菜单选择各种功能——可以演示编译c程序的过程以及静态与动态函数库的生成及使用。(2)endian.c为一个简单的C函数用于识别机器的内存大小端。(3)endian.h为相应的头文件,...

    如何编写Makefile

    在这篇文档中,将以C/C++的源码作为我们基础,所以必然涉及一些关于C/C++的编译的知识,相关于这方面的内容,还请各 位查看相关的编译器的文档。这里所默认的编译器是UNIX 下的GCC 和CC。 关于程序的编译和链接

    万能通用性Makefile/C++/C全自动编译实例

    2.本程序是利用bat脚本直接运行Makefile,非常方便;直接点击运行“run.bat”即可编译,方便快捷。 3.makefile为采用通用性规则编写,自动搜索所在目录中的代码,自动编译; 4.适应于编译C++/C代码。

    Makefile添加spdlog第三方库示例工程.tar.gz

    本工程为示例Makefile引入当前第三方库的使用,该处第三方库为spdlog,工程已在ubuntu18.04下编译通过,希望能对你有所帮助!

    在Linux下编译并运行C程序

    在Linux下编译并运行C/C++程序的流程,包括环境设定,编译命令,makefile编写等

    CC++ 通用 Makefile

    本文提供了一个用于对 C/C++ 程序进行编译和连接以产生可执行程序的通用 Makefile。 在使用 Makefile 之前,只需对它进行一些简单的设置即可;而且一经设置,即使以后对源程序文件有所增减一般也不再需要改动 ...

    一个通用Makefile的编写

    我们在Linux环境下开发程序,少不了要自己编写Makefile,一个稍微大一些的工程下面都会包含很多.c的源文件。如果我们用gcc去一个一个编译每一个源文件的话,效率会低很多,但是如果我们可以写一个Makefile,那么只...

    ubuntu下编写C语言程序.md

    首次运用ubuntu编写程序:编写一个主程序文件main1.c和一个子程序文件sub1.c,有如下要求:子程序sub1.c包含一个算术运算函数float x2x(int a,int b),此函数功能为对两...(3)在ubuntu系统下用makefile方式编译主程序。

    韦东山通用Makefile文件

    2. 顶层Makefile中的CFLAGS在编译任意一个.c文件时都会使用 3. CFLAGS EXTRA_CFLAGS CFLAGS_xxx.o 三者组成xxx.c的编译选项 二、顶层目录的Makefile: 它除了定义obj-y来指定根目录下要编进程序去的文件、子...

    Makefile文件arm-none-linux-gnueabi-gcc编译文件

    Makefile文件arm-none-linux-gnueabi-gcc编译文件,linux下多个.C文件统一使用make文件进行编译

    MTK程序编译方法(通俗易懂)

    MTK的编译过程主要是在windows命令行下通过Makefile文件执行相应的prel脚本或c程序,将资源包生成c源程序,并与相应模块的c程序.o,.lib或.obj的中间代码,最终生成在手机上使用的.bin文件和在模拟器上使用的...

Global site tag (gtag.js) - Google Analytics