вырезать относительные пути вверх из выходных файлов объекта - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть шаблон make-файла (я не очень знаком с этим make-файлом), который я адаптировал для создания моего источника.

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 :=, но у меня возникли проблемы с отсутствующими правилами или другими проблемами

...