【问题标题】:patsubst and compiling source filespatsubst 和编译源文件
【发布时间】:2016-01-19 17:39:39
【问题描述】:

据我了解,makefile 中的以下几行应该编译当前目录中的所有源文件

SRC=Connection.cpp Request.cpp SessionHandler.cpp
OBJS=$(patsubst %.cpp,obj/%.o,$(SRC))

$(OBJS) : | obj
obj:
        @mkdir -p $@
obj/%.o : %.cpp
        g++ -std=c++11 -c $< -o $@

但只有 $(SRC) 中的第一个文件被编译并将对象放在 ./obj 中

g++ -std=c++11 -c Connection.cpp -o obj/Connection.o

我在这里缺少什么? 谢谢。

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    makefile 中只能有一个默认目标。

    GNU Make 手册的Arguments to Specify the Goals 部分讨论了控制默认目标。

    这个问题的关键是:

    默认情况下,目标是 makefile 中的第一个目标(不包括以句点开头的目标)。

    因此,在您的情况下,默认目标是 obj/Connection.o,因为您的 makefile 的这一位

    $(OBJS) : | obj
    

    扩展到

    obj/Connection.o obj/Request.o obj/SessionHandler.o: | obj
    

    相当于

    obj/Connection.o: | obj
    obj/Request.o: | obj
    obj/SessionHandler.o: | obj
    

    要让你想要替换的默认构建的所有目标文件

    $(OBJS) : | obj
    

    .PHONY: all
    all: $(OBJS)
    

    【讨论】:

      猜你喜欢
      • 2016-03-15
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 2010-10-23
      • 2013-01-08
      • 1970-01-01
      相关资源
      最近更新 更多