【问题标题】:How to compile multiple file types in the same way using Make如何使用 Make 以相同的方式编译多种文件类型
【发布时间】:2015-06-08 10:21:19
【问题描述】:
在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 $@
鉴于它们非常相似(只是文件扩展名不同),我可以以某种方式将它们合并为两种文件类型创建一个通用目标吗?
【问题讨论】:
标签:
c++
makefile
gnu-make
【解决方案1】:
一般来说,不,您不能将它们组合在一起。你有两个选择。第一种是使用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 $@)。