我对C ++ makefile非常陌生,我拥有下面的makefile,我大多是从Internet上的某个地方复制它的。我对makefile的贡献是“测试”目标,这就是问题所在。
我的代码在include(对于标题),src(对于源代码)和test(对于测试源代码)目录中进行组织。对于标准目标,我想在src文件夹中构建所有文件,其中还包括main.cpp文件。为了进行测试构建,我想构建src文件夹except main.cpp中的所有文件,以及另外<< test >>文件夹中的所有文件。我希望我的测试目标能够实现这一目标,但是失败了。它只是从标准目标构建文件。我该如何纠正我的错误。
谢谢
我使用的makefile:
APP=myappname
SRC_DIR=src
INC_DIR=include
OBJ_DIR=obj
BIN_DIR=bin
TEST_SRC_DIR=test
MAIN_CPP_NAME=main.cpp
CC=g++
LD=g++
CFLAGS=-O2 -c -Wall -std=c++17
LFLGAS=
DFLAGS=-g3 -O0 -DDEBUG
INCFLAGS=-I$(INC_DIR)
SOURCES=$(wildcard $(SRC_DIR)/*.cpp)
HEADERS=$(wildcard $(INC_DIR)/*.hpp)
OBJECTS=$(SOURCES:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o)
DEPENDS=$(OBJ_DIR)/.depends
.PHONY: all
all: $(BIN_DIR)/$(APP)
.PHONY: debug
debug: CFLAGS+=$(DFLAGS)
debug: all
.PHONY: test
test: SOURCES=$(wildcard $(SRC_DIR)/*.cpp)
test: SOURCES=$(filter-out $(SRC_DIR)/$(MAIN_CPP_NAME), $(SOURCES))
test: OBJECTS=$(SOURCES:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o)
test: TEST_SOURCES=$(wildcard $(TEST_SRC_DIR)/*.cpp)
test: OBJECTS+=$(TEST_SOURCES:$(TEST_SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o)
test: all
$(BIN_DIR)/$(APP): $(OBJECTS) | $(BIN_DIR)
$(LD) $(LFLGAS) -o $@ $^
$(OBJ_DIR)/%.o: | $(OBJ_DIR)
$(CC) $(CFLAGS) $(INCFLAGS) -o $@ $<
$(DEPENDS): $(SOURCES) | $(OBJ_DIR)
$(CC) $(INCFLAGS) -MM $(SOURCES) | sed -e 's!^!$(OBJ_DIR)/!' >$@
ifneq ($(MAKECMDGOALS),clean)
-include $(DEPENDS)
endif
$(BIN_DIR):
mkdir -p $@
$(OBJ_DIR):
mkdir -p $@
.PHONY: clean
clean:
rm -rf $(BIN_DIR) $(OBJ_DIR)
我对C ++ makefile非常陌生,我拥有下面的makefile,我大多是从Internet上的某个地方复制它的。我对makefile的贡献是“测试”目标,这就是问题所在。我的代码...