一个最简单的Makefile例子(转)

原文地址:http://hi.baidu.com/hellosim/blog/item/42e78341b40c3e8db2b7dce3.html
转载请注明出处

1.hello.c

#include <stdio.h>
int main()
{
    printf("Hello World!\n");
    return 0;
}

2.Makefile

hello : hello.o
    cc -o hello hello.o

hello.o : hello.c
    cc -c hello.c

clean : 
    rm hello.o

说明:cc -o hello hello.o前面是一个tab的空格

3.执行make,产生可执行文件hello

输出如下:
cc -c hello.c
cc -o hello hello.o

4.执行make clean,删除产生的中间文件hello.o

输出如下:
rm hello.o


另转:http://hi.baidu.com/s_rlzheng/blog/item/4bc10a06892e217d030881ef.html

  本来早就应该学Makefile了,只是我偷懒,现在才学呵呵^_^makefile的好处叫我说,老实说我也说不出什么之所以然来,但是可以肯定的是它是linux平台的软件工程师都要必备的知识^_^

一、程序的编译及链接

    我们编译程序,无非是想要得到一个可执行文件,而这个过程则是经过这两步:

***.c->编译->***.o->链接->可执行文件。即.c经过编译得到.o文件,.o文件是一个中间文件,再对这些中间文件进行链接最终可得到可执行文件。

二、Makefile的规则

首先,来看一看Makefile的书写规则:

target ... : prerequisites ...

            command

            ...

            ...

    target也就是一个目标文件,可以是.o文件,也可以是执行文件,还可以是一个标签(Label)。

    prerequisites就是,要生成那个target所需要的文件或是目标。

    command也就是make需要执行的命令(任意的Shell命令)。这里要注意的是在命令前面要加上一个tab键,不是空格,是按一个tab键按出来的空格。

     这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比 target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则,也就是Makefile中最核心的内容。这是Makefile的主线和核心,但要写好一个Makefile还得继续努力。

三、一个最简单的Makefile例子

如有一个工程,含有3个头文件及四个c文件,那为了生成所需的可执行文件,这时的Makefile可以这样写:

test:main.o t1.o t2.o t3.o

     gcc –o test main.o t1.o t2.o t3.o

main.o:main.c

     gcc –c main.c

t1.o:t1.c t1.h

     gcc –c t1.c

t2.o:t2.c t2.h

     gcc –c t2.c

t3.o:t3.c t3.h

     gcc –c t3.c

clean:

     rm test main.o t1.o t2.o t3.o

到这里一个最简单的makefile就写好了,把它的名字保存为Makefile就可以了,这时你只要在终端敲一下make,它就自动帮你编译链接了^_^如果敲入make clean,它将删掉那些中间文件及可执行文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
构建一个makefile可以通过以下步骤完成: 1. 确定目标文件和依赖文件:首先,你需要确定你的目标文件是什么,以及它所依赖的文件是哪些。目标文件是你要生成的最终可执行文件或库文件,而依赖文件是构建目标文件所需要的源文件或其他依赖文件。 2. 编写规则:在makefile中,你需要编写规则来指定如何生成目标文件。规则由目标、依赖和命令组成。目标是你要生成的文件,依赖是生成目标文件所需要的文件,而命令则是生成目标文件的具体操作。 3. 编写命令:在规则中,你需要编写命令来执行生成目标文件的操作。命令可以是任何你在命令行中执行的操作,比如编译源文件、链接目标文件等。 4. 添加变量:为了方便管理和维护,你可以在makefile中添加变量来存储一些常用的路径、编译选项等。通过使用变量,你可以在整个makefile中重复使用相同的值,从而减少代码的冗余。 下面是一个简单makefile示例: ``` # 定义变量 CC = gcc CFLAGS = -Wall # 定义目标和依赖 TARGET = main OBJS = main.o hello.o test.o # 构建规则 $(TARGET): $(OBJS) $(CC) -o $(TARGET) $(OBJS) # 编译规则 %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ # 清理规则 clean: rm -f $(OBJS) $(TARGET) ``` 在这个示例中,我们定义了变量CC和CFLAGS来存储编译器和编译选项。然后,我们定义了目标文件TARGET和依赖文件OBJS。接下来,我们使用规则来指定如何生成目标文件。在这个例子中,我们使用了一个模式规则来编译源文件。最后,我们添加了一个清理规则来删除生成的目标文件。 通过编写类似这样的makefile,你可以根据你的项目需求来构建自己的makefile,并使用make命令来自动化编译你的项目。 #### 引用[.reference_title] - *1* *2* [【Linux】Linux 项目自动化构建工具 -- make/makefile 的使用](https://blog.csdn.net/m0_62391199/article/details/127639008)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [makefile之创建简单makefile工程(一)](https://blog.csdn.net/weixin_39270987/article/details/106626097)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值