个人工具
登录
查看“Gcchowto”的源代码 - Ubuntu中文
页面
讨论
查看源代码
历史
搜索
导航
首页
最近更改
随机页面
页面分类
帮助
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息
查看“Gcchowto”的源代码
来自Ubuntu中文
←
Gcchowto
跳转至:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== 简单的 Makefile 文件 == 为便于不熟悉 '''make''' 的读者理解,本节提供一个简单的用法示例。Make 凭借本身的优势,可在所有的 Unix 系统中被找到。要了解关于Gnu make 的更多信息,请参考 Richard M. Stallman 和 Roland McGrath 编写的 ''GNU Make'' 手册。 Make 从 ''makefile''(默认是当前目录下的名为‘Makefile’的文件)中读取项目的描述。makefile指定了一系列''目标''(比如可执行文件)和''依赖''(比如对象文件和源文件)的编译规则,其格式如下: 目标: 依赖 命令 对每一个目标,make 检查其对应的依赖文件修改时间来确定该目标是否需要利用对应的命令重新建立。注意到,makefile 中''命令''行必须以单个的 '''<font color="blue">TAB</font>''' 字符进行缩进,不能是空格。 GNU Make 包含许多默认的规则(参考''隐含''规则)来简化 makefile 的构建。比如说,它们指定‘'''.o'''’文件可以通过编译‘'''.c'''’文件得到,可执行文件可以通过将‘'''.o'''’链接到一起获得。隐含规则通过被叫做''make变量''的东西所指定,比如 '''CC'''(C 语言编译器)和 '''CFLAGS'''(C程序的编译选项);在makefile文件中它们通过独占一行的 '''变量=值''' 的形式被设置。对 '''C++''' ,其等价的变量是'''CXX'''和'''CXXFLAGS''',而变量'''CPPFLAGS'''则是编译预处理选项。 现在我们为上一节的项目写一个简单的 makefile 文件: CC=gcc CFLAGS=-Wall hello: hello.o hello_fn.o clean: rm -f hello hello.o hello_fn.o 该文件可以这样来读:使用 C 语言编译器 '''gcc''',和编译选项‘-Wall’,从对象文件‘hello.o’和‘hello_fn.o’生成目标可执行文件 '''hello'''(文件‘hello.o’和‘hello_fn.o’通过隐含规则分别由‘hello.c’和‘hello_fn.c’生成)。目标'''clean'''没有依赖文件,它只是简单地移除所有编译生成的文件。'''rm'''命令的选项 ‘-f’(force) 抑制文件不存在时产生的错误消息。 另外,需要注意的是,如果包含main函数的cpp文件为A.cpp, makefile中最好把可执行文件名也写成 A。 要使用该 makefile 文件,输入 '''make'''。不加参数调用make时,makefile文件中的第一个目标被建立,从而生成可执行文件‘hello’: $ make gcc -Wall -c -o hello.o hello.c gcc -Wall -c -o hello_fn.o hello_fn.c gcc hello.o hello_fn.o -o hello $ ./hello Hello, world! 一个源文件被修改要重新生成可执行文件,简单地再次输入 '''make''' 即可。通过检查目标文件和依赖文件的时间戳,程序 make 可识别哪些文件已经修改并依据对应的规则更新其对应的目标文件: $ vim hello.c (打开编辑器修改一下文件) $ make gcc -Wall -c -o hello.o hello.c gcc hello.o hello_fn.o -o hello $ ./hello Hello, world! 最后,我们移除 make 生成的文件,输入 make clean: $ make clean rm -f hello hello.o hello_fn.o 一个专业的 makefile文件通常包含用于安装(make install)和测试(make check)等额外的目标。 本文中涉及到的例子都足够简单以至于可以完全不需要makefile,但是对任何大些的程序都使用 make 是很有必要的。
返回至
Gcchowto
。