首页 > 其他分享 >GNU make-Makefile文件简介

GNU make-Makefile文件简介

时间:2024-08-06 12:16:23浏览次数:14  
标签:GNU make Makefile build xs shared hello

Makefile简介

Makefile是一种特殊格式的文件,被make工具使用来管理软件的构建过程。Makefile定义了一组规则和依赖关系,告诉make如何编译和链接程序。

Makefile语句

TARGET: PREREQUISTS
	COMMAND

Makefile的语句由上述三部分组成,例如target: hello prerequists: hello.c command: gcc hello.c -o hello

hello: hello.c
	gcc hello.c -o hello

Makefile变量

  • 递归展开方式变量

    这一类型的定义由=进行定义,此时是严格的文本替换。例如:

    xs = mh
    ns = $(xs)
    all:;
    	echo $(ns)
    

    在执行语句时,首先,echo $(ns)会替换为echo $(xs)然后才会替换成echo mh。这就是递归的进行替换。

  • 直接展开方式变量

    这一类型的定义由:=进行定义,在变量定义时就展开。

    ns := $(xs)
    xs = mh
    

    此时由于ns是直接展开的,如果xs定义在后面,此时ns会直接变为空,无法完成对xs变量的引用。

Makefile伪目标

伪目标使用.PHONY进行声明,其后的值如share,此语句表明share并不是真正的目标,只执行后续的命令,而不生成目标。

.PHONY: shared
shared: # 不生成shared目标文件
	ls

Makefile实例

CC = gcc
APP = webserver
SRCS-y := reactor.c webserver.c websocket.c
all: shared

.PHONY: shared build

shared: build/$(APP)-shared
	ln -sf $(APP)-shared build/$(APP)

build/$(APP)-shared: $(SRCS-y) | build
	$(CC) $(SRCS-y) -o $@

build:
	@mkdir -p build

注意

  1. Makefilevscode中使用时可能会报错"make: *** No rule to make target '@mkdir', needed by 'build'. Stop."

    原因:vscode中的tab可能默认为四个空格

    解法:将tab修改为非四个空格

标签:GNU,make,Makefile,build,xs,shared,hello
From: https://www.cnblogs.com/solicit/p/18344914

相关文章

  • 使用git-bash 进入MINGW64使用mingw32-make编译提示目录前面有个“/cygdrive/d”如何
    问题出现的根本原因使用绝对路径时,exportBUILD_ROOT='D:/XX/XX'注意不能使用单引号直接地址exportBUILD_ROOT=D:/XX/XX 刚刚接触Cygwin,头一个问题就是:Cygwin如何访问Windows的各个磁盘目录,以及在Windows平台下如何访问Cygwin中的目录。执行mount命令后......
  • makefile--
    MakeFile中经常需要得到系统和编译器的版本root-config:ROOTutilityforyourMakefiles[phil@linux952~]$root-config--cxxicpx[phil@linux952~]$root-config-hUnknownargument"-h"!Usage:root-config[--prefix[=DIR]][--exec-prefix[=DIR]][--version][--c......
  • cmake配置项目引用动态库
     note#本文将介绍使用FIND_PACKAGE配置项目动态库的方法cmakeversion:3.18platform:win1020H2概述#创建了一个动态库,再由主项目调用该动态库。find<lib库名>.cmake的内容是:1.定义动态库的头文件所在路径2.定义库所在路径写好cmake文件后,也可以方便给其他人调......
  • cmake引入第三方库的debug和release版本之Windows版本
    概述#本文将介绍cmak引入第三方库debug和release不同配置。Windows上,习惯将debug模式下生成的动态库名后缀添加D以作和release区分。cmake创建一个项目A,A引入动态库B,cmake怎么配置A链接动态库B的debug和release对应的库呢本文的教程是基于 这里,如果没有看,我推荐你先看......
  • FreeMaker 入门
    Freemaker基础什么是模板引擎?为什么需要它?模板引擎是一种用于生成动态内容的类库(或框架),通过将预定义的模板与特定数据合并,来生成最终的输出。使用模板引擎有很多的优点,首先就是提供现成的模板文件语法和解析能力。开发者只要按照特定要求去编写模板文件,比如使用${参数}语法,......
  • 1、 window平台opencv下载编译, 基于cmake和QT工具链
    1.环境准备,源码下载1.1前置环境qt下载安装cmake安装,可参考:https://blog.csdn.net/qq_51355375/article/details/1391866811.2opencv源码下载官网地址:https://opencv.org/releases/下载源码:2.opencv编译这里使用cmakegui图形化配置,操作简答些。2.1源......
  • ESP32 RainMaker简介
    RainMaker可为您提供以下组件和功能:设备SDK:允许用户配置可读取/修改的设备信息和属性。可以实现网络配置、OTA升级,云通信等功能。透明的云中间件:支持亚马逊AWS服务,使得设备的公开属性可以被手机APP或其他第三方服务(如语音助手)访问。自适应iOS/Android的手机APP:......
  • 快速写一个Makefile
    本文主要展示Makefile的基本要素和示例,让读者可以快速写出一个实用的Makefile。简要说明Makefile,GNUmake命令工具。书写格式<target>:<prerequisites>[tab] <commands><target> 文件名或某操作的名字(伪目标phonytarget); <prerequisites> 通常为一组文件名,用......
  • clion 《cmake自定义静态库后,生成的exe无法运行》
    背景项目生成lib引入,在生成exe过程中无法正常运行处理办法让链接器静态链接GCC和C++标准库set(CMAKE_EXE_LINKER_FLAGS"-static-libgcc-static-libstdc++")主CMakeLists.txtcmake_minimum_required(VERSION3.28)project(speech)#编译版本set(CMAKE_CXX_STANDAR......
  • Makefile demo
    #Project:server#MakefilecreatedbyEmbarcaderoDev-C++6.3CPP=g++.exeCC=gcc.exeWINDRES=windres.exeOBJ=helloserver.osoapC.osoapServer.ostdsoap2.oLINKOBJ=helloserver.osoapC.osoapServer.ostdsoap2.oLIBS=-L&q......