<small id='WtqgU'></small><noframes id='WtqgU'>

  1. <tfoot id='WtqgU'></tfoot>
    <i id='WtqgU'><tr id='WtqgU'><dt id='WtqgU'><q id='WtqgU'><span id='WtqgU'><b id='WtqgU'><form id='WtqgU'><ins id='WtqgU'></ins><ul id='WtqgU'></ul><sub id='WtqgU'></sub></form><legend id='WtqgU'></legend><bdo id='WtqgU'><pre id='WtqgU'><center id='WtqgU'></center></pre></bdo></b><th id='WtqgU'></th></span></q></dt></tr></i><div id='WtqgU'><tfoot id='WtqgU'></tfoot><dl id='WtqgU'><fieldset id='WtqgU'></fieldset></dl></div>

      <legend id='WtqgU'><style id='WtqgU'><dir id='WtqgU'><q id='WtqgU'></q></dir></style></legend>
        <bdo id='WtqgU'></bdo><ul id='WtqgU'></ul>
    1. 使用 make 将 .o 文件移动到单独的目录

      时间:2023-10-17
        <tbody id='bXJ4K'></tbody>

          <legend id='bXJ4K'><style id='bXJ4K'><dir id='bXJ4K'><q id='bXJ4K'></q></dir></style></legend>
        • <small id='bXJ4K'></small><noframes id='bXJ4K'>

          <tfoot id='bXJ4K'></tfoot>
            <bdo id='bXJ4K'></bdo><ul id='bXJ4K'></ul>
              1. <i id='bXJ4K'><tr id='bXJ4K'><dt id='bXJ4K'><q id='bXJ4K'><span id='bXJ4K'><b id='bXJ4K'><form id='bXJ4K'><ins id='bXJ4K'></ins><ul id='bXJ4K'></ul><sub id='bXJ4K'></sub></form><legend id='bXJ4K'></legend><bdo id='bXJ4K'><pre id='bXJ4K'><center id='bXJ4K'></center></pre></bdo></b><th id='bXJ4K'></th></span></q></dt></tr></i><div id='bXJ4K'><tfoot id='bXJ4K'></tfoot><dl id='bXJ4K'><fieldset id='bXJ4K'></fieldset></dl></div>
                本文介绍了使用 make 将 .o 文件移动到单独的目录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                我尝试了无数次尝试将我的 .o 文件移动到我的 obj 文件夹,但无论我做什么,它都无法正常工作.

                I've tried numerous attempts to move my .o files to my obj folder, but no matter what I do, it simply just doesn't work.

                从提供的 makefile 来看,将 .o 文件移动到指定文件夹的最佳方法是什么?

                Judging from the makefile provided, what is the best method to move .o files to a specified folder?

                BIN = bin/
                OBJ = obj/
                TARGET = opengl_03
                DEPS = main.o  displayinit.o initializer.o algorithms.o matrix3f.o window.o vertex3.o
                CC = g++
                CFLAGS = -g 
                LIBS = -lglut -lGLEW -lGL 
                INCLUDEPATH = -L/usr/include/ -L/usr/lib/ -L/usr/lib/x86_64-linux-gnu/
                
                $(TARGET) : $(DEPS)
                    $(CC) $(CFLAGS) -o $(BIN)$(TARGET) $(DEPS) $(LIBS) $(INCLUDEPATH) 
                
                displayinit.o : displayinit.cpp displayinit.h
                    $(CC) $(LIBS) $(INCLUDEPATH) -c displayinit.cpp && mv displayinit.o $(OBJ)displayinit.o
                initializer.o : initializer.cpp initializer.h
                    $(CC) $(LIBS) $(INCLUDEPATH) -c initializer.cpp $(OBJ)
                algorithms.o : algorithms.cpp algorithms.h
                    $(CC) -c algorithms.cpp $(OBJ)
                matrix3f.o : matrix3f.cpp matrix3f.h
                    $(CC) $(LIBS) $(INCLUDEPATH)  -c matrix3f.cpp $(OBJ)
                vertex3.o : vertex3.cpp vertex3.h
                    $(CC) $(LIBS) $(INCLUDEPATH)  -c vertex3.cpp $(OBJ)
                window.o : window.cpp window.h
                    $(CC) $(LIBS) $(INCLUDEPATH) -c window.cpp $(OBJ)
                main.o : main.cpp
                    $(CC) $(LIBS) $(INCLUDEPATH) -c main.cpp $(OBJ)
                

                推荐答案

                要指定创建对象的位置,请使用 -o

                window.o : window.cpp window.h
                    $(CC) $(LIBS) $(INCLUDEPATH) -c window.cpp -o $(OBJ)/$@
                

                <小时>

                您可以这样做:


                Here is what you could do:

                1. 指定目标文件所在的目录

                1. specify the directory where you want the object files to go

                OBJDIR    =   objdir
                

              2. 通过将 .cpp 替换为 .o,从所有 .cpp 文件的列表中创建需要编译的目标文件列表 并添加前缀 $(OBJDIR)/ 到它:

              3. Create a list of object files that need to be compiled, from the list of all .cpp files by replacing .cpp with .o and add the prefix $(OBJDIR)/ to it:

                OBJ = $(addprefix $(OBJDIR)/, $(patsubst %.cpp, %.o, $(wildcard *.cpp)))
                

                所以你的 $(OBJ) 看起来像:objdir/window.o objdir/main.o 等等

                So your $(OBJ) will look like: objdir/window.o objdir/main.o and so on

                如果目录不存在,则添加一个目标以创建该目录:

                Add a target to create the directory if it does not exist:

                $(OBJDIR):
                    mkdir $(OBJDIR)
                

              4. 在创建主要目标之前先创建目录目标:

              5. Make the directory target before you make your main target:

                all: $(OBJDIR) myapp
                

              6. 从当前目录中的 .cpp 文件编译 $(OBJDIR) 中所有 .o 目标文件的规则:

              7. Rule to compile all the .o object files in $(OBJDIR) from .cpp files in the current directory:

                $(OBJDIR)/%.o: %.cpp
                    $(GCC) $(CPPFLAGS) -c $< -o $@
                

                这将导致类似:

                g++ -c main.cpp -o objdir/main.o
                

              8. 你的主要目标没有改变:

              9. Your main target is unchanged:

                $(TARGET): $(OBJ)
                    $(GCC) $(LDFLAGS) -o $@ $^ 
                

                这看起来像:

                g++  -o myapp objdir/window.o objdir/main.o 
                

              10. 为了完整性,将 clean 目标添加到清理对象中:

              11. For completeness add clean target to cleanup objects:

                clean:
                    @rm -f $(TARGET) $(wildcard *.o)
                    @rm -rf $(OBJDIR) 
                

              12. 并定义 .PHONY 目标,例如即使存在同名的目录或文件,也会进行这些操作:

              13. And define .PHONY targets, e.g. these will be made even if directories or files with the same name exist:

                .PHONY: all clean
                

              14. 所以它应该是这样的:

                OBJDIR    =   objdir
                OBJ       =   $(addprefix $(OBJDIR)/, $(patsubst %.cpp, %.o, $(wildcard *.cpp)))
                TARGET    =   my app
                
                .PHONY: all clean
                
                all: $(OBJDIR) $(TARGET)
                
                $(OBJDIR):
                    mkdir $(OBJDIR)
                
                $(OBJDIR)/%.o: %.cpp
                    $(GCC) $(CPPFLAGS) -c $< -o $@
                
                $(TARGET): $(OBJ)
                    $(GCC) $(LDFLAGS) -o $@ $^ 
                
                clean:
                    @rm -f $(TARGET) $(wildcard *.o)
                    @rm -rf $(OBJDIR) 
                

                如果你有像 main.cppa.cpp 这样的文件,这就是 make 会做的:

                And if you have files such as main.cpp and a.cpp this is what make would do:

                > ls
                Makefile a.cpp    main.cpp
                
                > make
                mkdir objdir
                g++ -I. -c a.cpp -o objdir/a.o
                g++ -I. -c main.cpp -o objdir/main.o
                g++ -o myapp objdir/a.o objdir/main.o 
                
                > ls
                Makefile a.cpp    main.cpp objdir   myapp
                
                > make clean
                > ls
                Makefile a.cpp    main.cpp
                

                如果您想阅读有关上述任何内容的更多详细信息,请查看 GNU 制作文档页面

                And if you want to read more details about any of the above have a look at GNU make doc page

                这篇关于使用 make 将 .o 文件移动到单独的目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                上一篇:使用 OpenCV 库编译代码时出现链接错误 下一篇:如何在 Linux 上调用 MinGW 交叉编译器?

                相关文章

              15. <tfoot id='Rtbuy'></tfoot>
                <i id='Rtbuy'><tr id='Rtbuy'><dt id='Rtbuy'><q id='Rtbuy'><span id='Rtbuy'><b id='Rtbuy'><form id='Rtbuy'><ins id='Rtbuy'></ins><ul id='Rtbuy'></ul><sub id='Rtbuy'></sub></form><legend id='Rtbuy'></legend><bdo id='Rtbuy'><pre id='Rtbuy'><center id='Rtbuy'></center></pre></bdo></b><th id='Rtbuy'></th></span></q></dt></tr></i><div id='Rtbuy'><tfoot id='Rtbuy'></tfoot><dl id='Rtbuy'><fieldset id='Rtbuy'></fieldset></dl></div>

              16. <legend id='Rtbuy'><style id='Rtbuy'><dir id='Rtbuy'><q id='Rtbuy'></q></dir></style></legend>
              17. <small id='Rtbuy'></small><noframes id='Rtbuy'>

                  <bdo id='Rtbuy'></bdo><ul id='Rtbuy'></ul>