从对象输出文件中删除相对向上的路径

时间:2018-12-20 11:11:45

标签: gnu-make

我有一个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 :=,但是遇到规则丢失或其他问题的麻烦

0 个答案:

没有答案