在 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 $@
由于它们非常相似(仅文件扩展名不同),我可以以某种方式将它们合并起来,为两种文件类型创建一个通用目标吗?
最佳答案
一般来说,不,你不能将它们组合起来。你有两个选择。第一种是使用 eval
语句,如 Amon Zilca 链接的答案中所示。
另一种方法是将配方保存在变量中并重复使用:
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 $@)
。
关于c++ - 如何使用 Make 以相同的方式编译多种文件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30706600/