如何使makefile适合make test目标?

时间:2017-06-08 15:46:26

标签: c++ makefile

我的文件夹结构如下所示:

<div data-bind="with: currentDocument">
  <input data-bind="tagit: {tagsList: tags}"></input>
</div>

我想创建一个像src --main.cpp tests --src ----main_test.cpp Makefile 这样的目标,以便能够将测试程序作为make main_test运行。

最初我有一个Makefile,我很长时间没有修改过。所以我开始修改其内容,以便创建新的./main_test目标。

生成文件

main_test

不幸的是,出了点问题:

CXX = g++
CXXFLAGS = -O2 -Wall -std=c++11 -Iinclude
LDFLAGS =

EXE = main
SRCDIR = src
BINDIR = bin
OBJDIR = tests/bin

OBJECTS = $(patsubst $(SRCDIR)/%.cpp,$(BINDIR)/%.o,$(wildcard 
$(SRCDIR)/*.cpp))

all: $(EXE)

$(EXE): $(BINDIR) $(OBJECTS)
    $(CXX) $(OBJECTS) -o $(EXE) $(LDFLAGS)

$(BINDIR)/%.o: $(SRCDIR)/%.cpp
    $(CXX) $(CXXFLAGS) -c -MMD -o $@ $<

include $(wildcard $(BINDIR)/*.d)

$(OBJDIR):
    mkdir -p $(OBJDIR)

main_test: $(OBJDIR) tests/bin/main_test.o
    g++ -O2 -Wall -std=c++11 tests/bin/main_test.o -o tests/main_test

tests/bin/main_test.o: $(OBJDIR) tests/src/main_test.cpp
    g++ -O2 -Wall -std=c++11 tests/src/main_test.cpp -o tests/bin/main_test.o

clean_tests:
    rm -rf $(OBJDIR)

$(BINDIR):
    mkdir -p $(BINDIR)

clean:
    rm -rf $(BINDIR) $(EXE)

.PHONY: clean all

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

tests/bin/main_test.o的编译规则中,您错过了-c命令行选项。

对输出目录使用order-only dependency,例如:

main_test: tests/bin/main_test.o | $(OBJDIR)