Makefile第九课:Makefile条件控制

目录

  • Makefile的条件规则
    • 1.ifeq / else / endif
    • 2.ifneq/else/endif
    • 3.ifdef/else/endif
    • 总结

Makefile的条件规则

学习杜老师推荐的Makefile教程视频,链接。记录下个人学习笔记,仅供自己参考。

之前有转载过杜老师的从零Makefile落地算法大项目文章,感兴趣的可以看看。

本课程主要讲解Makefile中的条件语句。(from ChatGPT)

1.ifeq / else / endif

Makefile中的ifeq/else/endif是条件语句,用于根据变量或表达式的值选择不同的操作。语法结构如下:

ifeq (arg1, arg2)
    # 满足条件时执行的操作
else ifeq (arg3, arg4)
    # 满足条件时执行的操作
else
    # 不满足条件时执行的操作
endif

其中,ifeqelse ifeq用于比较两个参数的值,如果相等则满足条件,执行对应的操作;else表示上一个条件不满足时,执行的操作;endif表示条件语句结束。

在Makefile中,条件语句可以用于设置变量、选择编译器、选择链接器、选择目标文件等,非常灵活。下面是一个简单的示例:

CC = gcc
ARCH = x86

ifeq ($(ARCH), arm)
    CC = arm-linux-gcc
else ifeq ($(ARCH), mips)
    CC = mips-linux-gcc
endif

main: main.c
    $(CC) -o $@ $^

以上代码中,根据变量$(ARCH)的值,选择不同的编译器。如果$(ARCH)等于arm,则使用arm-linux-gcc;如果$(ARCH)等于mips,则使用mips-linux-gcc;否则使用默认的gcc编译器。最终将main.c编译成可执行文件main

2.ifneq/else/endif

ifneq语法结构与ifeq相似,都是Makefile中的条件语句,ifneq表示当变量不相等时,执行其后的语句。语法结构如下:

ifneq (arg1, arg2)
    # arg1 不等于 arg2 时执行的语句
else
    # arg1 等于 arg2 时执行的语句
endif

示例如下:

CC = gcc
ifeq ($(CC), gcc)
    CFLAGS = -Wall -O2
else
    CFLAGS = -Wall
endif

在上面的例子中,如果$(CC)的值为gcc,则CFLAGS的值为-Wall -O2,否则CFLAGS的值为-Wall

3.ifdef/else/endif

ifdeq语法结构:如果变量已定义,则执行后面的语句。否则执行else语句或者直接跳过这个if

ifdef <variable>
<commands-if-variable-is-defined>
else
<commands-if-variable-is-not-defined>
endif

示例如下:

ifdef CC
	CXX=$(CC)
else
	CXX=g++
endif

在上面的例子中,如果变量$(CC)已定义,则将CXX变量的值设为$(CC),否则将CXX设为g++

总结

本次课程主要学习了Makefile中的三种不同的条件控制语句。

你可能感兴趣的:(Makefile,Makefile,g++,c++)