啊o额iu鱼吧 关注:170贴子:7,397

【Makefile】强大方便的工具……

只看楼主收藏回复

简化编译命令的……
类似批处理……


IP属地:广东1楼2014-11-08 11:19回复
    沙发……


    IP属地:广东2楼2014-11-08 11:19
    收起回复
      板凳……


      IP属地:广东3楼2014-11-08 11:20
      回复
        地板……


        IP属地:广东4楼2014-11-08 11:20
        回复
          用好了可以替代IDE,IDE打开太慢,
          用vim+makefile,顶个IDE……


          IP属地:广东5楼2014-11-08 11:21
          回复
            vim和makefile,最早都是linux上用的,所以linux上学起来很顺利,现在已经会基本的使用了……


            IP属地:广东6楼2014-11-08 11:23
            回复
              现在试试windows的,遇到各种问题,


              IP属地:广东7楼2014-11-08 11:24
              回复
                1,windows没有make命令,各个编译器有自己的make,比如,据说,vs用的叫nmake,
                而我用的是MinGW,自带的make叫mingw32-make,名字干嘛这么长,于是我复制一个就叫make,这下就能用make命令了……


                IP属地:广东8楼2014-11-08 11:26
                回复
                  2,windows的目录,是用\反斜杠backslash,来分隔各级目录,
                  这个问题很严重,
                  因为\这个符号在各种语言里都有特殊的作用,
                  在makefile里\标志着换行,
                  因此这样一行就会报错,
                  exe=exe\
                  反正我只是为了在源码目录的另一个目录下生成obj和exe之类的,
                  用两个backslash倒是可以了,但是vim makefile却无法高亮了,
                  或者就是导致每次都编译,总之还没解决……


                  IP属地:广东9楼2014-11-08 11:41
                  回复
                    调试的工作也可以搞进来,但是gdb还不会用……


                    IP属地:广东10楼2014-11-08 13:45
                    回复
                      又来搞makefile了,自动变量,先试试……
                      有个$%怎么搞都没东西……
                      CC=g++
                      SRC=cpp
                      CFLAGS=-Wall -O2 -g
                      INCLUDES=-I.
                      LDFLAGS=-L.
                      LIBS=-ltemp3
                      OBJS=$(patsubst %.cpp,%.o,$(wildcard *.cpp))
                      TARGET=temp.exe
                      RM=del
                      ECHO=echo ^%' $% ---\
                      ^@' $@ ---\
                      ^<' $< ---\
                      ^?' $? ---\
                      ^^' $^ ---\
                      ^+' $+ ---\
                      ^*' $* >nul
                      all: $(TARGET)
                      $<
                      $(ECHO)
                      make clean
                      $(TARGET): $(OBJS) libtemp3.a libtemp4.so
                      $(CC) -o $(TARGET) $(LIBS) $(LDFLAGS) $(OBJS)
                      $(ECHO)
                      lib%.a:%.o
                      ar rc $@ $^
                      $(ECHO)
                      lib%.so:%.o
                      $(CC) $^ -shared -o $@
                      $(ECHO)
                      $(OBJS): %.o:%.$(SRC)
                      $(CC) -c $(CFLAGS) $(INCLUDES) $^ -o $@
                      $(ECHO)
                      clean:
                      -$(RM) $(OBJS) *.a *.so $(TARGET)
                      $(ECHO)


                      IP属地:广东11楼2015-05-09 16:30
                      回复


                        IP属地:广东12楼2015-05-09 16:35
                        回复
                          然后就是一些变量名,用些习惯上常用的,又好认的,
                          AR,ARFLAGS,AS,ASFLAGS,CC,CFLAGS,CXX,CXXFLAGS,CPP,CPPFLAGS,LD,LDFLAGS,RM
                          VPATH,
                          OBJS,LIBS,INCLUDES,EXT,TARGET,


                          IP属地:广东13楼2015-05-09 17:15
                          回复
                            然后是忽略错误,
                            .IGNORE
                            这个关键字指定的目标忽略错误,但是依赖这个目标的目标不执行,
                            -
                            还有减号开头的命令忽略错误,
                            .IGNORE:clean
                            clean:
                            $(RM) *.o
                            -del *.o


                            IP属地:广东14楼2015-05-09 17:27
                            回复
                              include multi.mk
                              inlude包含另一个makefile


                              IP属地:广东15楼2015-05-09 17:27
                              回复