ฉันเป็นมือใหม่มากสำหรับ makefiles และฉันต้องการสร้างไดเร็กทอรีโดยใช้ makefile ไดเร็กทอรีโปรเจ็กต์ของฉันเป็นแบบนี้
+--Project
+--output
+--source
+Testfile.cpp
+Makefile
ฉันต้องการใส่อ็อบเจ็กต์ทั้งหมดและเอาต์พุตลงในโฟลเดอร์เอาต์พุตตามลำดับ ฉันต้องการสร้างโครงสร้างโฟลเดอร์ซึ่งจะเป็นเช่นนี้หลังจากรวบรวม
+--Project
+--output
+--debug (or release)
+--objs
+Testfile.o
+Testfile (my executable file)
+--source
+Testfile.cpp
+Makefile
ฉันลองใช้หลายตัวเลือก แต่ไม่สำเร็จ โปรดช่วยฉันสร้างไดเรกทอรีโดยใช้ make file ฉันโพสต์ Makefile ของฉันเพื่อการพิจารณาของคุณ
#---------------------------------------------------------------------
# Input dirs, names, files
#---------------------------------------------------------------------
OUTPUT_ROOT := output/
TITLE_NAME := TestProj
ifdef DEBUG
TITLE_NAME += _DEBUG
else
ifdef RELEASE
TITLE_NAME += _RELEASE
endif
endif
# Include all the source files here with the directory tree
SOURCES := \
source/TestFile.cpp \
#---------------------------------------------------------------------
# configs
#---------------------------------------------------------------------
ifdef DEBUG
OUT_DIR := $(OUTPUT_ROOT)debug
CC_FLAGS := -c -Wall
else
ifdef RELEASE
OUT_DIR := $(OUTPUT_ROOT)release
CC_FLAGS := -c -Wall
else
$(error no build type defined)
endif
endif
# Put objects in the output directory.
OUT_O_DIR := $(OUT_DIR)/objs
#---------------------------------------------------------------------
# settings
#---------------------------------------------------------------------
OBJS = $(SOURCES:.cpp=.o)
DIRS = $(subst /,/,$(sort $(dir $(OBJS))))
DIR_TARGET = $(OUT_DIR)
OUTPUT_TARGET = $(OUT_DIR)/$(TITLE_NAME)
CC_FLAGS +=
LCF_FLAGS :=
LD_FLAGS :=
#---------------------------------------------------------------------
# executables
#---------------------------------------------------------------------
MD := mkdir
RM := rm
CC := g++
#---------------------------------------------------------------------
# rules
#---------------------------------------------------------------------
.PHONY: all clean title
all: title
clean:
$(RM) -rf $(OUT_DIR)
$(DIR_TARGET):
$(MD) -p $(DIRS)
.cpp.o:
@$(CC) -c $< -o $@
$(OBJS): $(OUT_O_DIR)/%.o: %.cpp
@$(CC) -c $< -o $@
title: $(DIR_TARGET) $(OBJS)
ขอบคุณล่วงหน้า. โปรดชี้แนะฉันหากฉันทำผิดพลาดด้วย
output/debug', needed by
ไดเรกทอรีเป้าหมาย" หยุด " แต่ฉันจะไม่กังวลเกี่ยวกับเรื่องนั้นในตอนนี้ จะยึดตามกฎพื้นฐาน :). ขอบคุณที่ชี้แนะครับ. และฉันกำลังเรียกใช้ "make" จากไดเร็กทอรี toplevel เท่านั้น