首页 > 其他分享 >快速写一个Makefile

快速写一个Makefile

时间:2024-08-02 19:53:36浏览次数:16  
标签:BIN NAME 一个 Makefile clean CFLAGS 快速 变量

本文主要展示Makefile的基本要素和示例,让读者可以快速写出一个实用的Makefile。

简要说明

Makefile,GNU make命令工具。

  • 书写格式

<target> : <prerequisites>

[tab]  <commands>

<target>  文件名或某操作的名字(伪目标phony target); 
<prerequisites>  通常为一组文件名,用空格间隔;
<commands>  一行或多行shell命令;
[tab]键可以用.RECIPEPREFIX变量替换成其它字符;
每行命令各自在不同的shell中执行。同一行可以用分号间隔多个命令,用反斜杠\转义换行。

  • 赋值与变量

赋值的几种方式:

    =    延时,被使用时才展开定义
    ≔   定义即生效
    ?=  该变量为空时设置值
    +=  追加

内置变量:CC、AR、RM
自动变量:
$^    所有的依赖文件
$@  所有的目标文件
$<   第一个依赖文件
$*    通配符%通配的部分

Makefile示例

#This is a simple Makefile example
CC = gcc
CFLAGS = -I./include/
CFLAGS += -Wall -Werror

CODE_VER := 1.0
CFLAGS += -DTEST_ENABLE
CFLAGS += -DTEST_VER="\"$(CODE_VER)\""

LDDIR = -L./lib/
LDFLAGS = -ldl

BIN_NAME:=simple_test
OBJS = $(BIN_NAME).o  
all:$(BIN_NAME)

$(BIN_NAME):$(OBJS)
	$(CC) -o $@ $^ $(LDDIR) $(LDFLAGS)

.PHONY: clean
clean:
	rm -rf $(OBJS) $(BIN_NAME)

上面只有一个.c文件的情况,其实只要键入gcc命令(示例如下)就可以编译生成可执行文件。

gcc -o simple_test simple_test.c

但是对于有多个文件目录的代码工程,Makefile就会让编译更高效。

从上面的图片中,可以看到CFLAGS变量是-c编译参数,该变量通过-I指定头文件的路径信息,-D向.c和.h文件传递参数。LDFLAGS变量是-o链接参数,可以链接需要用到的动态库。另外Makefile通过-L指定所需链接的动态库路径。

本Makefile示例中有一句".PHONY: clean",声明伪目标,避免该工作目录下有名称为clean的文件而使得make命令报错,例如提示"make: `clean' is up to date."

 

标签:BIN,NAME,一个,Makefile,clean,CFLAGS,快速,变量
From: https://blog.csdn.net/starlight_0/article/details/140740764

相关文章

  • 用Java手搓一个依赖注入框架
    1、bean容器publicclassContainer{privatefinalstaticLoggerlog=Logger.getLogger(Container.class.getSimpleName());privateMap<String,Object>context=newHashMap<>();privateList<SuspendBean>suspendBeans=newArr......
  • ShardingSphere实战(3)- 快速实现分库分表
    上篇博客,我们讲了ShardingSphere实战(2)-水平分表,这篇博客,我们继续实现分库以及解决前面遗留的问题。一、绑定表基于上篇博客配置的前提下(上篇博客的最后放上了完整的配置,需要的可以去看看,这里就不重复写上去了),加上绑定表的配置:#绑定表关系spring.shardingsphere.shar......
  • 在Linux上创建一个.NET Core应用作为服务运行
    要在Linux上创建一个.NETCore应用作为服务运行,你可以使用systemd来管理你的服务。以下是创建服务的基本步骤和示例代码:确保你的.NETCore应用已经发布并且可以在Linux上运行。创建一个新的systemd服务文件。创建一个名为yourapp.service的文件,替换yourapp为你的应用......
  • 实现吸顶效果,一个页面多个元素吸顶效果
    前言新业务开发用到了吸顶效果而且是一个页面滚动到不同的位置不同的元素进行吸顶叠加。我是基于uniapp去写的,原理思路都一样代码部分下面的代码我写了两种方法都是一样的一个是通过js控制变量添加元素一个是直接通过css样式进行控制 <!--上半部总览位置--> <view......
  • linux shell 写的一个小玩意(bash含99乘法表和计算器)
     esac.sh 主页面#!/bin/shwhile:do    echo"***********************************"    echo"*                *"    echo"*  输入你想要点的妹妹:1-3号 *"    echo"*    ......
  • Linux新建一个服务
    新建一个服务你可以创建一个Systemd服务单元,以便在系统启动时运行特定的脚本或程序。首先,创建一个.service文件,例如my_service.service,并将其放在/etc/systemd/system/目录下。在这个文件中,定义你的服务,包括启动方式、依赖性等。例如,my_service.service文件可能如下所示:[Unit]......
  • 在 VSCode 上,使用 #%% 单元格时,shift-enter 不再执行交互窗口中的单元格并移至下一个
    在VSCode上,当使用#%%单元格时,shift-enter不再执行交互窗口中的单元格并移至下一个单元格。它曾经工作了很多年,但现在在某些代码行上按Shift键输入会在标题为“PythonREPL”的新窗口中引发错误。我仍然可以使用Control-Enter来执行交互窗口中的单元格,但这不会将光标移动......
  • 是否存在四开文档网的 yaml 标头中仅允许一个选项的情况?
    我正在使用VScodeIDE制作一个四开网页。当我添加编辑文档时,字符突出显示变得一团糟。我相信它将while文档解释为yaml标头的一部分,但我绝对没有在yaml标头中缺少破折号。这是四开文件的屏幕截图,在yaml标头周围有三个破折号奇怪的是,这个四开文件渲染得非常好,没......
  • 使用pg_basebackup备份和恢复一个pg数据库
    创建用于备份用的用户:创建数据库备份用户:psql-Upostgres-c"CREATEUSERdbbackupWITHREPLICATIONPASSWORD'123456'"-U指定备份用户-c指定创建用户命令备份用户只需要授权:replication即可创建用于备份的目录:创建备份目录:mkdir-p/pgdata/backup/如果不是本......
  • 最新SEO自动外链蜘蛛池工具促进百度快速收录使用方法介绍
    此工具集成市面上所有自动外链网站的资源链接,经过合并、去重、筛选、验证总结出最终的外链资源,软件实时更新 本软件将您繁杂的外链推广转为自动化进行,并且加入站群的支持,您只需要将你的站群域名粘贴到软件里,点击开始按钮就可以了 软件会自动轮刷您的每一个网站 软件效......