I figured it out. The solution was to use timestamps. Here is the makefile:
Code:
MASTER_SRC_DIR = master_src
MASTER_SRC_FILES = $(wildcard $(MASTER_SRC_DIR)/*.c)
SPECIFIC_SRC_DIR = platform_src
SPECIFIC_SRC_FILES = $(wildcard $(SPECIFIC_SRC_DIR)/*.c)
SOURCE_DIR = tmp
SOURCE_FILES = $(subst $(MASTER_SRC_DIR),$(SOURCE_DIR),$(MASTER_SRC_FILES)) \
$(subst $(SPECIFIC_SRC_DIR),$(SOURCE_DIR),$(SPECIFIC_SRC_FILES))
TIMESTAMP_MASTER_SRC = $(SOURCE_DIR)/MasterSrc.time
TIMESTAMP_PLATFORM_SRC = $(SOURCE_DIR)/PlatformSrc.time
all: $(SOURCE_FILES)
$(SOURCE_FILES): $(TIMESTAMP_MASTER_SRC) $(TIMESTAMP_PLATFORM_SRC)
$(TIMESTAMP_MASTER_SRC): $(MASTER_SRC_FILES)
$(foreach FILE, $?, \
if [ ! -e $(subst $(MASTER_SRC_DIR),$(SPECIFIC_SRC_DIR),$(FILE)) ] ; then cp $(FILE) $(SOURCE_DIR)/ ; \
else cp $(subst $(MASTER_SRC_DIR),$(SPECIFIC_SRC_DIR),$(FILE)) $(SOURCE_DIR)/ ; fi ; \
)
echo Do not delete! >$(TIMESTAMP_MASTER_SRC)
$(TIMESTAMP_PLATFORM_SRC): $(SPECIFIC_SRC_FILES)
$(foreach FILE, $?, cp $(FILE) $(SOURCE_DIR)/ ; )
echo Do not delete! >$(TIMESTAMP_PLATFORM_SRC)
That's it. As era said it's pretty ugly, but it's working. Can close the thread now.