Makefile 入门笔记 | 常见函数 | 选项 | 命令

Makefile 入门笔记 | 常见函数 | 选项 | 命令

  • 1. **什么是Makefile?**
  • 2. **Makefile的基本结构是什么?**
  • 3. **如何定义变量和使用变量?**
  • 4. **如何编写规则和命令?**
  • 5. **如何处理依赖关系?**
  • 6. **如何调用子目录中的Makefile?**
  • 7. **有哪些常见的Makefile函数?**
    • 1.**wildcard:**
    • 2.**patsubst:**
    • 3.**foreach:**
    • 4.**if:**
    • 5.**shell:**
    • 6.**addprefix:**
    • 7.**subst:**
    • 8.**strip:**
  • 8. **有哪些常见的命令和选项?**
    • 常见的`make`命令:
    • 1.**`make`:**
    • 2.**`make target`:**
    • 3.**`make -f Makefile`:**
    • 4.**`make -n`或`make --just-print`:**
    • 5.**`make -B`或`make --always-make`:**
    • 6.**`make clean`:**
    • 常见的`make`选项:
    • 1.**`-C directory`:**
    • 2.**`-j N`:**
    • 3.**`-k`或`--keep-going`:**
    • 4.**`-s`或`--silent`:**
    • 5.**`-r`或`--no-builtin-rules`:**
    • 6.**`-d`或`--debug`:**
    • 7.**`-w`或`--print-directory`:**
    • 8.**`--version`:**

1. 什么是Makefile?

  • Makefile是一个文本文件,其中包含了一系列规则,描述了源代码文件之间的依赖关系以及构建规则。Make工具使用Makefile来判断哪些文件需要重新编译,以及如何进行编译。

2. Makefile的基本结构是什么?

  • Makefile由一系列规则组成,每个规则包含一个目标、依赖项和执行命令。目标是文件的名称,依赖项是构建目标所需的文件,而命令是构建目标的步骤。

3. 如何定义变量和使用变量?

  • 可以使用变量名 = 值的语法定义变量,然后通过$(变量名)来引用变量。例如:
    CC = gcc
    CFLAGS = -Wall
    
    target: dependency
        $(CC) $(CFLAGS) -o target source.c
    

4. 如何编写规则和命令?

  • 规则由目标、依赖项和命令组成,例如:
    target: dependency
        command
    
    其中,target是构建的目标文件,dependency是目标文件的依赖项,command是构建的实际命令。

5. 如何处理依赖关系?

  • 使用规则中的依赖项来指定目标文件所依赖的其他文件,确保在构建目标之前,其依赖项已经构建完成。例如:
    target: dependency1 dependency2
        command
    

6. 如何调用子目录中的Makefile?

  • 使用make命令的递归调用功能,例如:
    all:
        $(MAKE) -C subdir
    

在Makefile中,all是一个常见的目标名称,它通常被用作默认目标。当你在命令行中运行make而没有指定具体的目标时,Make工具会尝试构建默认目标,而通常这个默认目标就是all

例如,一个简单的Makefile可能包含如下内容:

all: target1 target2

target1:
    command1

target2:
    command2

在这个例子中,all是默认目标,它依赖于target1target2。当你在命令行中运行make时,它将尝试构建all,然后按照规则依次构建target1target2。这样,通过将常用的目标放在all中,可以方便地一次性构建整个项目或执行一系列任务。

你可以在Makefile中自定义all目标,根据项目的需要添加相关的依赖项和命令。

7. 有哪些常见的Makefile函数?

  • 一些常见的Makefile函数包括wildcardforeach等。例如:
    sources = $(wildcard *.c)
    objs = $(patsubst %.c, %.o, $(sources))
    

Makefile中有一些常见的函数,它们提供了在Makefile中进行文本处理和操作的能力。以下是一些常见的Makefile函数:

1.wildcard:

  • 用于匹配文件名,返回符合模式的文件列表。例如:
    sources = $(wildcard *.c)
    

2.patsubst:

  • 用于替换字符串中的模式。通常用于将源文件列表转换为目标文件列表。例如:
    objs = $(patsubst %.c, %.o, $(sources))
    

3.foreach:

  • 用于在循环中处理元素。例如:
    files = file1.c file2.c file3.c
    targets = $(foreach file, $(files), $(basename $(file)).o)
    

4.if:

  • 用于在条件语句中执行不同的操作。例如:
    debug = 1
    ifdef debug
        CFLAGS += -g
    endif
    

5.shell:

  • 用于在Makefile中执行Shell命令,并返回结果。例如:
    date = $(shell date)
    

6.addprefix:

  • 为列表中的每个元素添加前缀。例如:
    sources = file1.c file2.c file3.c
    objs = $(addprefix obj_, $(sources))
    

7.subst:

  • 用于替换字符串中的文本。例如:
    message = Hello, World!
    result = $(subst World, Universe, $(message))
    

8.strip:

  • 用于去除变量值中的空格。例如:
    spaces =  one   two   three   
    stripped = $(strip $(spaces))
    

8. 有哪些常见的命令和选项?

  • 常见的make命令包括makemake clean等。选项包括-C用于指定工作目录,-f用于指定Makefile文件等。

常见的make命令:

1.make

  • 执行默认目标(通常是all)进行构建。

2.make target

  • 指定构建特定的目标。例如,make clean用于清理生成的文件。

3.make -f Makefile

  • 指定使用名为Makefile的文件进行构建,而不使用默认的Makefile文件。

4.make -nmake --just-print

  • 打印构建过程中将要执行的命令,但不真正执行它们。

5.make -Bmake --always-make

  • 强制重新构建所有目标,而不考虑它们的时间戳。

6.make clean

  • 执行清理操作,通常删除生成的目标文件和可执行文件,以及其他临时文件。

常见的make选项:

1.-C directory

  • 指定make在执行之前进入directory目录。

2.-j N

  • 指定并行构建的任务数量。例如,make -j4表示同时执行4个任务。

3.-k--keep-going

  • 即使某个目标构建失败,也继续构建其他目标。

4.-s--silent

  • 使make运行在安静模式,减少输出信息。

5.-r--no-builtin-rules

  • 禁用内置规则,只使用自定义的规则。

6.-d--debug

  • 输出详细的调试信息,用于排查构建问题。

7.-w--print-directory

  • 在构建时显示当前工作目录的名称。

8.--version

  • 显示make的版本信息。

这只是一些常见的make命令和选项,实际上还有更多的选项可以根据具体的需求使用。你可以通过运行man make或查阅相关文档来获取更详细的信息。

你可能感兴趣的:(笔记,linux,运维)