有我的目录结构:
Project
|
+---------------+----------------+
| | |
Sources/ Temp/ Makefile
| |
+----+----+ *.o
| |
Test/ *.cpp
|
*.cpp
我正在尝试将每个.cpp
编译到我的Temp
目录中,而没有子文件夹。
有我的Makefile
:
CC = g++
WARNING = -w
OPTIMIZATION = -O0
ARGUMENTS = -g
INCLUDES = -I Includes -I Sources
LIBS = -L
OBJDIR = Temp
SRC = $(wildcard Sources/*.cpp) $(wildcard Sources/*/*.cpp)
OBJECTS = $(SRC:%.cpp=$(OBJDIR)/%.o)
App: $(OBJECTS)
$(CC) -o $@ $^
$(OBJDIR)/%.o : %.cpp
$(CC) $(WARNING) $(OPTIMIZATION) $(ARGUMENTS) -c $< -o $@
运行它时,它总是尝试在我的Temp
中创建一个子文件夹:
g++ -w -O0 -g -c Sources/Main.cpp -o Temp/Sources/Main.o
我认为我需要使用OBJECTS = $(SRC:%.cpp=$(OBJDIR)/$(%F).o)
,但是我是Makefile
的新手,我不知道该怎么做...
有人可以解决吗?
答案 0 :(得分:1)
好的,我最终找到了一种方法。我在此stackoverflow question中找到了解决方案。
解决方案是$(addprefix $(OBJ_DIR)/, $(notdir $(SOURCES:.cpp=.o)))
。看来我必须使用notdir
函数而不是$(%F)
变量。