在这里,我自己写一个自己的Makefile的例子,说明一下Makefile是怎么写的。
准备工作:为了使我们的代码更加接近真实的大型程序,我们可以从网络上下载一些写好的源代码。我所使用的是 “Unix Network Programming” 这本书中的源代码。代码下载地址为:www.unpbook.com,下载的文件为unpv13e.tar.gz。使用命令
tar –zxvf unpv13e.tar.gz 直接解压就可以。解压之后按照README文件先编译一下(也可以不用做这一步,直接看下面的内容,如果在unpv13之下没有libunp.a这个文件再做这一步)。
进入目录,我们来建立一个自己的Makefile文件,自己编译自己的程序。
在unpv13e/ 这个目录内建立自己的一个目录。 拷贝unpv13e/tcpcliserv/ 目录下的 tcpserv01.c 和 str_echo08.c 到自己建立的目录下,给他们命名为tcpserv.c 和 str_echo.c。 并在这个目录下建立自己的Makefile文件。
首先,在目录 ~/unp/unpv13e/test/tcpserv 这个文件夹下写自己的程序,有两个文件,tcpserv.c 和 str_echo.c,还有自己写的Makefile 文件:
test@Ubuntu:~/unp/unpv13e/test/tcpserv$ ls
Makefile str_echo.c tcpserv.c
tcpserv.c 和 str_echo.c这两个文件都是用 unp.h 这个头文件,而这个文件的位置在 ~/unp/unpv13e/lib/ 这个目录中。它们不再调用其他头文件。
tcpserv.c 的开头为:
str_echo.c 的开头为:
在unp.h中,它自己又使用其它的头文件:
#include "../config.h" /* configuration options for current OS */
#include <sys/wait.h>
/* soem other headers …… */
# include "../lib/addrinfo.h"
我的Makefile 文件是这样写的:
CC = gcc
CFLAGS = -I../../lib -Wall
tcpserv: tcpserv.o str_echo.o
$(CC) $(CFLAGS) -o $@ $^ ../../libunp.a
.PHONY: clean
clean:
-rm *.o tcpserv
其中 –I../../lib 标记表示gcc 编译的时候,以Makefile文件所在的目录为基准,在目录 ../../lib 中查找头文件,也就是在~/unp/unpv13e/lib/ 这个文件中查找。../../lib是一个相对路径,你也可以把它换成绝对路径,比如 –I/home/test/unp/unpv13e/lib
-Wall 选项进行更好的判断。
$@ 表示target,这里即tcpserv
$^ 表示所有 依赖关系,这里即tcpserv.o 和 str_echo.o
../../libunp.a 是一个库文件(在Unix中叫做Archive File),里面放有很多自己定义的函数,我在tcpserv.c 和 str_echo.c 中都使用到了这些函数。.a 文件是把好多 .o 文件合在一起构成的一个文件,它并不依赖于.c源文件的存在。
.PHONY: clean 是指定clean为伪目标,即clean是一个假的target,make命令不会生成这个文件。
rm命令之前有一个小小的减号,表明忽略错误,继续执行。
如果rm之间没有减号,那么一旦出错,就会停止执行。看下面的代码:
在终端中运行 make clean 命令,如果当前目录下只有tcpserv.c str_echo.c Makefile 这三个文件,那么就会出现下面的情况:
rm *.o
rm: 无法删除 “*.o”: 没有那个文件或目录
make: *** [clean] 错误 1
执行到rm *.o之后就会停下来,不再执行rm tcpserv了。
编好自己的Makefile 之后,可以在终端中运行make –n命令查看自己所写的Makefile 文件会执行哪些命令,这可以用来判断我们的Makefile是否正确。
使用make 命令进行编译。
相关推荐
Makefile c语言Makefile c语言Makefile c语言Makefile c语言 四本资料!自己学习的时候整理的!
此为本人自己编写的,在Linux下的Makefile源码,仅适用于C语言单目标,且所有依赖的.c和.h文件要在同一个目录 使用方法:将Makefile文件复制到工程所在的.c和.h文件目录中,然后在linux终端,打开此文件所在的目录,执行...
Linux内核2.6 Makefile文件 Linux内核2.6 Makefile文件
Linux内核Makefile文件 Linux内核Makefile文件 Linux内核Makefile文件 Linux内核Makefile文件
make文件夹包含了两个子文件夹,a_b子文件夹实现多目标Makefile编译,projects子文件夹实现多层次Makefile文件编译。make文件夹中实现多个Makefile文件编译,即调用a_b和project2子文件夹中Makefile编译。
NULL 博文链接:https://shihaiyang.iteye.com/blog/442421
Makefile文件格式详解.pdf
Linux平台Makefile文件的编写,方便C语言在linux下的编译
linux下makefile文件编写 linux下makefile文件编写 linux下makefile文件编写
makefile文件
Linux下Makefile文件的编写 Linux编程
linux下Makefile 文件的制作,讲解很详细
Linux C语言 vim 编辑器 makefile 多文件编译 C语言的编写 用户登录功能 2.创建多用户连接的服务端 3.创建服务端 4.私聊功能 5.文件传送功能
一份简短的资料,简要介绍了一些makefile的基本语法,有实例,可以救急,呵呵,我也是在救急中找到的资料。
在C语言编程中,MakeFile文件的编写一直是非常难学习的方面,资料中以实例的形式介绍Makefile文件的编写方法。
Makefile文件中的等号左右两边能不能有空格
让你详细了解linux下makefile文件的编写规则
Makefile文件各个符号和代码的解析
很轻松让你掌握如何写MakeFile文件