在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
看到它们非常相似(只有文件扩展名不同),我能以某种方式将它们合并为两种文件类型创建一个通用目标吗?
答案 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 $@)
。