2015-03-30 146 views
0

Q的更好的方法:这是我下面的Makefile片段:GNU品牌:同时使用C/C++的目标有不同的命令

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 [email protected] $< 

$(OBJ_DIR)/%.o: %.c 
    $(CC) -ggdb -Wall -Wextra -Werror $(INC) $(C_FLAGS) -c -o [email protected] $< 

我如何重构表达的“对象”后,取下类似的重复.cpp和。%c的规则

回答

2
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 [email protected] $< 

$(OBJ_DIR)/%.o: %.cpp 
    $(CXX) $(COMPILE_ARGS) 

$(OBJ_DIR)/%.o: %.c 
    $(CC) $(COMPILE_ARGS) 
+0

宏是一个有趣的解决方案。谢谢! – ProgDevel 2015-03-30 20:19:09

+1

您错过了$(CC)'和$(CXX)'的变更。 – 2015-03-30 20:19:38

+0

是的。这对我很重要 – ProgDevel 2015-03-30 20:21:25

相关问题