Makefiles ve g ++ konusunda yeniyim ve proje dosyalarının bağımlılığını -MM bayrağı kullanarak oluştururken bir sorunla karşılaşıyorum. Makefile'ı senin için düşündüğüm için gönderiyorum. Lütfen bir bak. Makefile'de -MM ile ilgili bağımlılıklar oluşturma sorunu
OUTPUT_ROOT := output/
SOURCE_ROOT := source/
TITLE_NAME := TestProj
SOURCES := \
MyFile.cpp \
stdAfx.cpp \
Main.cpp \
OUT_DIR := $(OUTPUT_ROOT)
OUT_O_DIR := $(OUT_DIR)
OBJS = $(SOURCES:%.cpp=$(OUT_O_DIR)%.o)
DEPS = $(OBJS:%.o=%.d)
DIRS = $(subst /,/,$(sort $(dir $(OBJS))))
SOURCE_TARGET = $(SOURCES:%.cpp=$(SOURCE_ROOT)%.cpp)
OUTPUT_TARGET = $(OUT_DIR)$(TITLE_NAME)
#---------------------------------------------------------------------
# executables
#---------------------------------------------------------------------
MD := mkdir -p
RM := rm
CC := g++
#---------------------------------------------------------------------
# rules
#---------------------------------------------------------------------
.PHONY: clean directories objects title
all: directories objects title
directories:
@$(MD) $(DIRS)
clean:
$(RM) -rf $(OUT_DIR)
$(OBJS): $(SOURCE_TARGET)
@$(CC) -c $< -o [email protected]
$(DEPS): $(SOURCE_TARGET)
@$(CC) -c -MM $< > $(DEPS)
-include $(DEPS)
objects:$(OBJS) $(DEPS)
title: $(OBJS)
@$(CC) $< -o [email protected]
Ben çeşitli seçenekler ve sooo defalarca denedik. Çözüme baktım ama bulamadım.
Bağımlılıkları doğru seçenek oluşturmak için "-MM" bayrağını kullanıyor musunuz? Eğer değilse lütfen bağımlılıkları üretmenin doğru yolunu öner. Bağımlılıkları otomatik olarak oluşturmak istedim çünkü projem çok sayıda dosyaya sahip olacak. Elle bağımlılığı elle yazmaktan daha iyi bir seçenek olduğunu düşündüm.
Bu
i peşing++: stdAfx.d: No such file or directory
g++: Main.d: No such file or directory
make: *** No rule to make target `stdAfx.d', needed by `objects'. Stop.
Teşekkür alıyorum hatalardır.
"DEPS = $ (OBJS:%. O =%. D)" nedir? Ve neden bazen ': =' ve bazen '=' kullanıyorsunuz? –
Nesne dizinindeki nesnelerin isimleri ile DEPS oluşturuyor. Ben sadece '=' ve ': =' seçenekleri ile test ediyorum, ama tam farkını bilmiyorum b/w onları – Jabez