编写生成文件模板以处理多个 C++ 扩展
writing a makefile template to handle multiple c++ extensions
我正在尝试研究如何为给定的源文件列表编写处理多个 c++ 扩展的 makefile 模板 - 但不想为每个可能的扩展制定单独的规则。 这可能吗?
例如
TMP_CPPEXTS := cpp c++
TMP_OBJDIR := ~/objfiles
TMP_SOURCEFILES := foo.cpp bar.c++
TMP_BASENAMES := $(basename $(TMP_SOURCEFILES))
TMP_OBJFILES := $(addprefix $(TMP_OBJDIR)/,$(addsuffix .o,$(notdir $(TMP_BASENAMES))))
TMP_DEPFILES :=$(addprefix $(TMP_OBJDIR)/,$(addsuffix .d,$(notdir $(TMP_BASENAMES))))
BD_EXTFROMBASE = $(strip $(foreach TMP_EXT,$(2),$(foreach TMP_NAME,$(1),$(if $(filter $(addsuffix .$(TMP_EXT),$(TMP_NAME)),$(TMP_SOURCEFILES)),$(EXT)))))
$(TMP_OBJFILES) : $(TMP_OBJDIR)/%.o : %.$(call BD_EXTFROMBASE,$*,$(TMP_CPPEXTS))
g++ -c $< -o $@
$(TMP_DEPFILES) : $(TMP_OBJDIR)/%.d : %.$(call BD_EXTFROMBASE,$*,$(TMP_CPPEXTS))
g++ -m $< -o $@
我已经验证TMP_OBJFILES包含预期的对象文件,但似乎无法使规则本身起作用?除了使用单独的规则/宏之外,还有其他建议吗?
这个怎么样:
define templ
$(TMP_OBJDIR)/%.o: %.$(1)
g++ -c $$< -o $$@
endef
$(foreach ext,$(TMP_CPPEXTS),$(eval $(call templ,$(ext))))
相关文章:
- 警告处理为错误这里有什么问题
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用流处理接收到的数据
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 基于多个条件处理地图中的所有元素
- 如何用数字处理log(0)
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- 错误处理.将系统错误代码映射到泛型
- 从文本文件中读取时钟时间和事件时间并进行处理
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 用于矢量处理的多个线程
- 对字符串进行排序时,在c++中处理sort()
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 处理除以零会导致<csignal>意外行为
- 是否可以在c++中处理字符串流中的各个元素
- 在多个核心中处理一个HTTP请求