GNUMake:使用不同命令同时使用C/C++目标的更好方法

GNU Make: A better way of using both C/C++ targets with different commands

本文关键字:C++ 目标 更好 方法 命令 GNUMake      更新时间:2023-10-16

Q:下面是我的Makefile片段:

SRCS+=$(wildcard *.c *.cpp)
OBJECTS=$(addprefix $(OBJ_DIR)/, $(patsubst %.c,%.o,$(SRCS:.cpp=.o)))
# .....
$(OBJ_DIR)/%.o: %.cpp
    $(CXX) -ggdb -Wall -Wextra -Werror $(INC) $(C_FLAGS) -c -o $@ $<
$(OBJ_DIR)/%.o: %.c
    $(CC) -ggdb -Wall -Wextra -Werror $(INC) $(C_FLAGS) -c -o $@ $<

如何重构"OBJECTS"之后的表达式,并删除.cpp和.%的类似规则的重复c

OBJECTS := $(patsubst %,$(OBJ_DIR)/%.o,$(basename $(SRCS)))
# Note that you may not need this variable at all.
COMPILE_ARGS = -ggdb -Wall -Wextra -Werror $(INC) $(C_FLAGS) -c -o $@ $<
$(OBJ_DIR)/%.o: %.cpp
    $(CXX) $(COMPILE_ARGS)
$(OBJ_DIR)/%.o: %.c
    $(CC) $(COMPILE_ARGS)