Makefile 文件格式
Makefile包含 目标文件、依赖文件、可运行命令三部分。
每部分的基本格式例如以下:
test: prog.o code.o
gcc -o test prog.o code.o
当中,第一行的test是目标文件。 prog.o、code.o是依赖文件;
第二行的gcc -o test prog.o code.o是可运行命令。
整个Makefile文件都是这样的格式。
下面是一些example:
-----------------------Makefile example 1----------------------------------
#this line is the comment for the Makefile
test: prog.o code.o
gcc prog.o code.o -o test
prog.o: prog.c prog.h code.h
gcc -c prog.c -o prog.o
code.o: code.c code.h
gcc -c code.c -o code.o
clean:
rm -f *.o
----------------------------------------------------------------------------------------------
-------------------------------example 2(包括变量)---------------------------------
#this line is the Makefile comment
OBJS = prog.o code.o
CC = gcc
CFLAGS = -Wall -g -O
test: ${OBJS}
${CC} ${CFLAGS} ${OBJS} -o test
prog.o: prog.c prog.h code.h
${CC} ${CFLAGS} -c prog.c -o prog.o
code.o: code.c code.h
${CC} ${CFLAGS} -c code.c -o code.o
clean:
rm -f *.o
------------------------------------------------------------------------------------------------
-------------------------------example 3(使用Makefile的隐含规则)---------------------------------
1,假设没有对应的编译命令,则使用隐含规则,全部的 ".c文件" 编译成与它名称同样的 ".o文件"。
2, 使用Makefile的自己主动变量。
#this line is the Makefile comment
OBJS = prog.o code.o
CC = gcc
test: ${OBJS}
${CC} -o $@ $^
prog.o: prog.c prog.h code.h #no exec command,and will generate the prog.o
code.o: code.c code.h #no exec command,and will generate the code.o
clean:
rm -f *.o
------------------------------------------------------------------------------------------------
-----------------------------------------------------下面为我測试过的实例文件内容 :-----------------------------------------------------
========================== Makefile ===============
#this line is the comment
CC = gcc
OBJS = my_str.o
CFLAGS = -Wall -g -O
program: my_main.c ${OBJS}
${CC} ${CFLAGS} $^ -o $@
my_str.o: my_str.c my_str.h
${CC} ${CFLAGS} -c my_str.c -o my_str.o
clean:
rm -f *.o
=======================================================================
==========================my_main.c=======================
#include <unistd.h>
#include <stdlib.h>
#include "my_str.h"
int
main(int argc, const char **argv)
{
if(my_cmp(argv[1], argv[2]) == 0)
write(1, "Equal !\n", sizeof("Equal !\n"));
else
write(1, "Not Equal !\n", sizeof("Not Equal !\n"));
exit(0);
}
===============================================================
========================my_str.c=============================
#include "my_str.h"
int
my_cmp(const char *str1, const char *str2)
{
if(!str1 || !str2)
return -1;
while(*str1 && *str2 && *str1 == *str2)
str1++, str2++;
return *str1 - *str2;
}
==================================================================
===================my_str.h============================================
#ifndef _MY_STR_H
#define _MY_STR_H
int my_cmp(const char *str1, const char *str2);
#endif
==================================================================
Makefile 文件格式的更多相关文章
- Makefile 文件格式;makefile伪目标
Makefile包含 目标文件.依赖文件.可运行命令三部分. 每部分的基本格式例如以下: test: prog.o code.o gcc -o test prog.o code.o 当中 ...
- C++学习笔记24:makefile文件
makefile make命令:负责c/c++程序编译与链接 make根据指定命令进行建构 建构规则文件:GNUmakefile , makefile,Makefile makefile 文件格式 m ...
- makefile介绍1.0
1.gcc参数 -o指定生成文件名 -c只编译不链接 2.makefile标准格式 CC=gcc #编译器变量,#代表注释 SRCS=main.cpp\#源文件变量 a.cpp\ b.cpp\ c.c ...
- Shell脚本——make命令和Makefile文件【转】
https://blog.csdn.net/twc829/article/details/72729799 make命令是一个常用的编译命令,尤其在C/C++开发中,make命令通过makefile文 ...
- 使用make
5.11 库的使用 代码的复用是计算机程序设计语言中的一个重要的概念.可以把编译好的目标文件模块统一放到一个库中,使得程序员可以在不同的程序中共享这些代码. 在Linux操作系统下,最后连接生成可执行 ...
- 别人的Linux私房菜(22)软件安装:源代码与Tarball
执行make,会在当前目录查找makefile文本文件(记录了源代码如何编译的详细信息). 内核相关的函数信息放置在/usr/lib./usr/lib64里. 在Tarball(一般为xxx.tar. ...
- linux-2.6.22.6内核启动分析之配置
配置过程最终结果是生成.config文件,我们想要对配置的目的有很清楚的了解,必须先对.config文件进行分析.通过cd命令切换到linux-2.6.22.6内核目录,输入vi .config 可以 ...
- 第22章 软件安装:源码与Tarball
开放源码的软件安装与升级简介 什么是开放源码.编译程序与可执行文件 开放源码:程序代码,写给人类看的程序语言 编译程序:将源码编译成机器能看得懂的语言 可执行文件:经过编译变成二进制程序后机器看得懂可 ...
- 教会你如何编写makefile文件
最近一直在学习makefile是如何编写的.当我们写的程序文件比较少的时候,敲入gcc /g++,当你在大型工程中,在一个个编译文件的话,你可能就会很郁闷.linux有一个自带的make命令,它让你的 ...
随机推荐
- 我的CSDN原创高质量免积分下载资源列表(持续更新)
最近几个月,我在CSDN平台,发表了大量原创高质量的项目,并给出了相应的源码.文档等相关资源. 为了方便CSDN用户或潜在需求者,下载到自己想要的资源,特分类整理出来,欢迎大家下载. 我的原则:原创高 ...
- HDFS中的命令行
HDFS中的命令行 本文介绍了HDFS以命令行执行的时候.几个经常使用的命令行的作用和怎样使用~ 1. fs fs是启动命令行动作,该命令用于提供一系列子命令. 使用形式为hadoop fs –cmd ...
- vue的钩子函数
1.computed 计算属性 计算属性将被混入到 Vue 实例中.所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 1..aPlus: { get: function ...
- 让透明div里的文字不透明
最近在工作中遇到一个问题,我在div里写上文字,当我把div变为半透明的时候,里面的文字也会随之透明.情况如下: <div class="box"> 这是一段不应该透明 ...
- word中添加Mathtype公式行间距改变问题
转载链接:http://blog.sciencenet.cn/home.php?mod=space&uid=471807&do=blog&id=616838 最近碰到在word ...
- Ubuntu18.04上使用LLDB调试Chromium Android C++代码。
###动机###Chromium Android源代码庞大且复杂.在调试器LLDB下能帮助我们更好的理解代码流程.介绍使用LLDB调试器调试android上chromium的C++代码. [1] 编译 ...
- Linux Mint 19.1将采用新的桌面布局
我们期待Linux Mint 19.1的发布在圣诞节假期之前到来,希望它会带来一些惊喜. Linux 19.1版本将默认包含Cinnamon 4.0桌面环境,Mint的开发人员说,这将比现在“看起来更 ...
- oracle基础入门(一)
一:Oracle的安装 我所知的Oracle的数据库有 10g,11g, 12g, 我们常用的是10g ,因为10g有scott的用户,而11和12现在还没有(哪位大神看到有问题可以指出哦), ...
- C++ lambda表达式 (二)
#include <functional> #include <iostream> int main() { using namespace std; int i = 3; i ...
- 用Shell脚本过滤Hadoop中不能訪问的节点
近期使用的一个集群hp1,由于维护集群的人不给力.节点总是过一段时间就掉一两个.今天发现重新启动hadoop时,HDFS已经进入保护模式了. 决定把slaves节点中的无法訪问的节点所有过滤掉.所以写 ...