在Makefile中,可以使用条件编译来根据不同的条件选择性地编译代码
# 定义一个变量,例如编译模式
COMPILE_MODE ?= debug
# 定义两个不同的编译选项
CFLAGS_DEBUG = -g -O0
CFLAGS_RELEASE = -O2 -DNDEBUG
# 使用条件判断选择编译选项
ifeq ($(COMPILE_MODE),debug)
CFLAGS = $(CFLAGS_DEBUG)
else ifeq ($(COMPILE_MODE),release)
CFLAGS = $(CFLAGS_RELEASE)
else
$(error Invalid compile mode: $(COMPILE_MODE))
endif
# 编译目标
TARGET = my_program
SRC = main.c foo.c bar.c
OBJ = $(SRC:.c=.o)
all: $(TARGET)
$(TARGET): $(OBJ)
$(CC) $(CFLAGS) $^ -o $@
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f $(TARGET) $(OBJ)
在这个示例中,我们定义了一个名为COMPILE_MODE
的变量,它可以是debug
或release
。然后,我们使用ifeq
、else ifeq
和else
语句来根据COMPILE_MODE
的值选择不同的编译选项。如果COMPILE_MODE
的值既不是debug
也不是release
,则会输出错误信息。
要使用此Makefile,只需在命令行中运行make
命令,并通过设置COMPILE_MODE
变量来指定编译模式:
# 使用debug模式编译
make COMPILE_MODE=debug
# 使用release模式编译
make COMPILE_MODE=release
这将根据指定的编译模式选择相应的编译选项。