代码之家  ›  专栏  ›  技术社区  ›  Trytio

makefile:将所有文件编译到一个不带子文件夹的文件夹中

  •  0
  • Trytio  · 技术社区  · 8 年前

    有我的目录结构:

                                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 $@
    

    当我运行它时,它总是尝试在 打临时工 :

    g++ -w -O0 -g -c Sources/Main.cpp -o Temp/Sources/Main.o
    

    我想我需要用 OBJECTS = $(SRC:%.cpp=$(OBJDIR)/$(%F).o) 但是我是新来的 生成文件 我不知道我怎么能做到…

    有人有解决办法吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Trytio    8 年前

    好吧,我终于找到了一个办法。我在这个里面找到了解决办法 stackoverflow question .

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