Makefile:将所有文件编译到一个没有子文件夹的文件夹中

时间:2018-08-14 21:39:14

标签: makefile

有我的目录结构:

                            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的新手,我不知道该怎么做...

有人可以解决吗?

1 个答案:

答案 0 :(得分:1)

好的,我最终找到了一种方法。我在此stackoverflow question中找到了解决方案。

解决方案是$(addprefix $(OBJ_DIR)/, $(notdir $(SOURCES:.cpp=.o)))。看来我必须使用notdir函数而不是$(%F)变量。