编译器有关的Makefile语法

在 Makefile 中,与编译器相关的语法通常用于定义编译规则和链接规则,以及设置编译器选项等。
 

编译器相关的 Makefile 语法

  • 定义变量
CFLAGS = -Wall -O2
  • 编译规则
%.o: %.c $(CC) $(CFLAGS) -c $< -o $@
  • 链接规则
program: file1.o file2.o $(CC) $^ -o $@
  • 使用编译器变量和选项
$(CC) $(CFLAGS) -c source.c -o object.o
  • 指定头文件搜索路径
CPPFLAGS = -I/path/to/include
  • 指定库文件搜索路径
LDFLAGS = -L/path/to/lib LDLIBS = -lmylib
  • 指定交叉编译器
CROSS_COMPILE=aarch64-linux-gnu- 
CROSS_COMPILE=$CROSS_COMPILETOOL
  • 指定生成目录
O=build
  • 指定架构
ARCH=arm64
 

CCFLAGS和CFLAGS的概念

在 Makefile 中,CCFLAGS 和 CFLAGS 变量都可以用来指定编译器选项。它们的区别在于用途和命名习惯。
  • CFLAGS:通常用来指定 C 语言的编译器选项,如警告级别、优化级别等。它是一个常见的约定俗成的变量名,用于存储与 C 语言编译相关的选项。
  • CCFLAGS:是一个更通用的变量名,可以用来指定任何编译器(包括 C、C++、Objective-C 等)的选项。它不限于特定语言,可以包含更广泛的编译器选项。
实际上,CCFLAGS 变量在某些 Makefile 中可能被用作 C 编译器选项的别名。这样做的目的是为了与其他语言的编译器选项变量保持一致,或者为了方便将同一组选项同时应用于多个编译器。
总而言之,CFLAGS 更常见且特定于 C 语言的编译器选项,而 CCFLAGS 则更通用、更灵活,可以适用于其他编译器。
 

CFLAGS可选项

CFLAGS 是在 Makefile 中用来存储 C 编译器选项的变量,可以包含一系列用于编译 C 代码的选项。以下是一些常见的 C 编译器选项,可以添加到 CFLAGS 中:
  • -Wall:启用大多数警告信息。
  • -Werror:将警告视为错误。
  • -g:生成调试信息。
  • -O2 或 -O3:开启优化级别 2 或 3。
  • -std=c11:指定使用 C11 标准进行编译。
  • -I:添加头文件搜索路径。
  • -L:添加库文件搜索路径。
  • -l:链接指定的库。
  • -D:定义预处理宏。
  • -c:只编译不链接,生成目标文件。
  • -o :指定输出文件名。
这些选项可以根据具体需求进行组合和调整,以满足不同的编译需求。通过合理设置 CFLAGS 变量,可以简化 Makefile 中的编译规则,并确保代码按照预期方式进行编译
 

CCFLAGS-y

CCFLAGS-y 是一个自定义的编译器选项,它在 Makefile 中可能被用来指示特定的条件编译。
在 Makefile 中,CCFLAGS-y 的约定通常是用于条件编译的情况。条件编译可以根据某些条件来选择性地包含或排除代码的一部分。 CCFLAGS-y 可能会被用作一个标志,用于启用或禁用特定的编译器选项。
具体来说,当某个条件满足时,CCFLAGS-y 变量中的选项会被添加到编译器选项中。而当该条件不满足时,这些选项则不会被包含在编译器选项中。
举个例子:
ccflags-y += -D__CCFLAGS_TEST__
__CCFLAGS_TEST__:=1
export __CCFLAGS_TEST__            // 导出了__CCFLAGS_TEST__宏,使得在 Makefile 中定义的宏可以在子进程中使用
通过以上的代码,编译过程中会将 __CCFLAGS_TEST__宏定义为1,从而在代码中可以根据这个宏的取值进行条件编译,实现不同的编译选项和行为。
 

ccflags-$(CONFIG_DEBUG_TEST) := -DDEBUG

ccflags-$(CONFIG_DEBUG_TEST) := -DDEBUG 的含义是根据名为 CONFIG_DEBUG_TEST 的配置选项来设置编译器选项。
  • 如果 CONFIG_DEBUG_TEST 配置选项被定义了(即非空),那么 ccflags-$(CONFIG_DEBUG_TEST) 将被设置为 -DDEBUG。-DDEBUG 是一个 C 编译器选项,用于在预处理阶段定义名为 DEBUG 的宏。
  • 如果 CONFIG_DEBUG_TEST 配置选项未定义或为空,那么 ccflags-$(CONFIG_DEBUG_TEST) 将为空,不会设置任何额外的编译器选项。
还需要在Kconfig中添加CONFIG_DEBUG_TEST 的配置选项
 

make clean

在Makefile中有以下定义:

clean: archclean bootclean

这行代码片段实际上定义了一个规则,说明了当执行 make clean 命令时,需要先执行 archclean 和 bootclean 这两个目标。这样做的目的是确保在执行清理操作时,先执行与特定架构相关的清理操作(archclean),然后再执行清除boot启动相关的文件(bootclean)

 

CRYPTO=yes

表示开启某种加密模块

 

make distclean

在 Makefile 中,distclean 是一个目标(target),通常用于执行清理操作,将项目恢复到一个“干净”的状态。具体来说,distclean 目标通常会删除构建过程中生成的所有文件,包括编译生成的目标文件、可执行文件、库文件,以及其它中间文件和生成的配置文件等。

使用 distclean 目标可以帮助开发者在项目中进行彻底的清理,以便重新开始构建整个项目。这在需要重置构建状态、解决构建问题或者进行完全的清理时非常有用

posted @ 2024-03-17 23:47  lethe1203  阅读(360)  评论(0编辑  收藏  举报