如何使用 Make 以相同的方式编译多种文件类型
How to compile multiple file types in the same way using Make
在 Makefile
中,我有以下两个半通用目标来处理任何 .cc
和 .cpp
文件的编译:
$(OBJ_DIR)/%.o: %.cc
mkdir -p $(dir $@)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCDIRS) -c $< -MD -o $@
$(OBJ_DIR)/%.o: %.cpp
mkdir -p $(dir $@)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCDIRS) -c $< -MD -o $@
鉴于它们非常相似(只是文件扩展名不同),我能否以某种方式合并它们以创建一个适用于两种文件类型的通用目标?
一般来说,不,你不能将它们结合起来。你有两个选择。第一种是使用 Amon Zilca 链接到的答案中的 eval
语句。
另一种方法是将配方保存在一个变量中并重新使用它:
define COMPILE
mkdir -p $(dir $@)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCDIRS) -c $< -MD -o $@
endef
$(OBJ_DIR)/%.o: %.cc
$(COMPILE)
$(OBJ_DIR)/%.o: %.cpp
$(COMPILE)
个人比较喜欢这种方式; eval
方法对我来说太过分了,除非你有很多扩展,或者你想通过调整变量来轻松添加更多。
哦,请注意,您也可以使用 $(@D)
而不是 $(dir $@)
。
在 Makefile
中,我有以下两个半通用目标来处理任何 .cc
和 .cpp
文件的编译:
$(OBJ_DIR)/%.o: %.cc
mkdir -p $(dir $@)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCDIRS) -c $< -MD -o $@
$(OBJ_DIR)/%.o: %.cpp
mkdir -p $(dir $@)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCDIRS) -c $< -MD -o $@
鉴于它们非常相似(只是文件扩展名不同),我能否以某种方式合并它们以创建一个适用于两种文件类型的通用目标?
一般来说,不,你不能将它们结合起来。你有两个选择。第一种是使用 Amon Zilca 链接到的答案中的 eval
语句。
另一种方法是将配方保存在一个变量中并重新使用它:
define COMPILE
mkdir -p $(dir $@)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCDIRS) -c $< -MD -o $@
endef
$(OBJ_DIR)/%.o: %.cc
$(COMPILE)
$(OBJ_DIR)/%.o: %.cpp
$(COMPILE)
个人比较喜欢这种方式; eval
方法对我来说太过分了,除非你有很多扩展,或者你想通过调整变量来轻松添加更多。
哦,请注意,您也可以使用 $(@D)
而不是 $(dir $@)
。