【问题标题】:Want to place all .o files into a directory, but make stops after compilng fist one想要将所有 .o 文件放到一个目录中,但在编译第一个后停止
【发布时间】:2012-10-18 20:20:51
【问题描述】:

我想要一个包含显式依赖项的简洁的 makefile,但将所有 .o 对象放在一个单独的目录中,以便稍后将其完全链接(在另一个文件中)。

问题是我的 make 在编译第一个源代码后停止,然后停止而没有任何错误。

CC=gcc
CFLAGS=-c -Wall -pedantic -std=c99

DIR=../obj

$(DIR)/CList.o : CList.c CList.h CList_aux.h Observation.h CList_View_aux.h
    $(CC) $(CFLAGS) CList.c -o $@
$(DIR)/CList_aux.o : CList_aux.c CList.h CNode.h
    $(CC) $(CFLAGS) CList_aux.c -o $@
$(DIR)/CList_View_aux.o : CList_View_aux.c CNode.h Observation.h
    $(CC) $(CFLAGS) CList_View_aux.c -o $@
$(DIR)/CNode.o : CNode.c CNode.h CNode_aux.h Observation.h CList.h
    $(CC) $(CFLAGS) CNode.c -o $@
$(DIR)/CNode_aux.o : CNode_aux.c CNode.h Observation.h
    $(CC) $(CFLAGS) CNode_aux.c -o $@
$(DIR)/Observation.o : Observation.c Observation.h Observation_aux.h CNode.h
    $(CC) $(CFLAGS) Observation.c -o $@
$(DIR)/Observation_aux.o : Observation.c Observation.h
    $(CC) $(CFLAGS) Observation_aux.c -o $@
$(DIR)/Record.o : Record.c Record.h Observation.h
    $(CC) $(CFLAGS) Record.c -o $@

【问题讨论】:

    标签: makefile


    【解决方案1】:

    默认情况下,make 在 makefile 中构建第一个目标。在这种情况下,即${DIR}/CList.o

    您需要一个不同的第一个目标,通常称为all

    OBJECTS = \
        $(DIR)/CList.o \
        $(DIR)/CList_aux.o \
        $(DIR)/CList_View_aux.o \
        $(DIR)/CNode.o \
        $(DIR)/CNode_aux.o \
        $(DIR)/Observation.o \
        $(DIR)/Observation_aux.o
    
    all: ${OBJECTS}
    

    请注意,无论${DIR} 中是否有任何目标文件,这都有效;在目录中查找目标文件的通配符可确保那些已经编译过一次的文件是最新的,但不会尝试构建那些以前编译失败或根本不存在的文件。

    【讨论】:

      【解决方案2】:

      如果 Makefile 真的和你发布的一样多,那么你错过了all: 规则。在没有明确的all 规则的情况下,make 假定要创建第一个当前规则,因此它会在此之后停止。为了实现你想要的,将这个添加(附加)到 Makefile(分别更改最终的可执行文件名称):

      OBJECTS = $(wildcard $(DIR)/*.o)
      
      all: $(EXECUTABLE)
      
      $(EXECUTABLE): $(OBJECTS)
              $(LD) $(LDFLAGS) -o $@ $^
      

      【讨论】:

      • 如果我执行rm $DIR/*.o,则不会重建任何内容。没有编译失败的东西也不会被重建——是吗?
      • @JonathanLeffler 我使用这种模式,它往往会奏效。也许我在这里打错了?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多