如何使用Make以相同的方式编译多个文件类型

时间:2015-06-08 10:21:19

标签: c++ makefile gnu-make

Cannot invoke 'DBFGetFieldInfo' with an argument list of type '(DBFHandle, Int32, [CChar], inout Int32, inout Int32)' Expected an argument list of type '(DBFHandle, Int32, UnsafeMutablePointer<Int8>, UnsafeMutablePointer<Int32>, UnsafeMutablePointer<Int32>)' 我有以下两个半通用目标来处理任何Makefile.cc文件的编译:

.cpp

看到它们非常相似(只有文件扩展名不同),我能以某种方式将它们合并为两种文件类型创建一个通用目标吗?

1 个答案:

答案 0 :(得分:3)

一般情况下,不,你不能将它们组合起来。你有两个选择。第一种是在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 $@)