【问题标题】: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 $@)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-15
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2016-09-26
    相关资源
    最近更新 更多