我有一个makefile模板(我不太熟悉这个makefile),我可以用它来构建源代码。
TARGET_EXEC ?=myProg
TARGET_DIR ?= ../../bin
TARGET=$(TARGET_DIR)/$(TARGET_EXEC)
CXX = arm-linux-gnueabihf-g++
CC = arm-linux-gnueabihf-gcc
COMMON_FLAGS=-O3 -Wall
BUILD_DIR ?= ../../build/$(TARGET_EXEC)
INC_DIRS= ../../extSources \
../../commonIncludes \
.
CSOURCES = \
../../extSources/src1.c \
../../extSources/src2.c
CXXSOURCES = \
main.cpp
SRCS := $(CSOURCES) $(CXXSOURCES)
OBJS := $(SRCS:%=$(BUILD_DIR)/%.o)
DEPS := $(OBJS:.o=.d)
INC_FLAGS := $(addprefix -I,$(INC_DIRS))
CPPFLAGS ?= $(INC_FLAGS) -MMD -MP
$(TARGET): $(OBJS)
$(MKDIR_P) $(dir $@)
$(CXX) $(OBJS) $(COMMON_FLAGS) -o $@ $(LDFLAGS)
# assembly
$(BUILD_DIR)/%.s.o: %.s
$(MKDIR_P) $(dir $@)
$(AS) $(ASFLAGS) -c $< -o $@
# c source
$(BUILD_DIR)/%.c.o: %.c
$(MKDIR_P) $(dir $@)
$(CC) $(CPPFLAGS) $(CFLAGS) $(COMMON_FLAGS) -c $< -o $@
# c++ source
$(BUILD_DIR)/%.cpp.o: %.cpp
$(MKDIR_P) $(dir $@)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(COMMON_FLAGS) -c $< -o $@
.PHONY: all clean
all: $(TARGET)
clean:
$(RM) -r $(BUILD_DIR)
$(RM) $(TARGET)
-include $(DEPS)
MKDIR_P ?= mkdir -p
我的问题是,具有相对'..'目录的对象没有放置在build
目录中,而是分散在目录中,因为输出设置为build/../../extSources
(在这种情况下,匹配源目录,但这当然取决于..
的数量)
我如何清理使用build
导向器构建的所有对象路径?
我尝试在$(notdir ...)
分配的不同部分使用OBJS :=
,但是遇到规则丢失或其他问题的麻烦