makefile

作者: Jack_Cui | 来源:发表于2018-11-05 17:30 被阅读0次

    makefile

    • 借此机会重新复习下gcc编译条件

      • 命令 -E 预处理命令 生成 .i 预处理的原始程序
            -S 翻译成汇编 生成 .s 汇编文件
            -c 汇编转换为二进制文件 生成.o 二进制文件
        -o 指定生成文件的名字
    • makefile文件是区分大小写的

    • 最简单的版本 第一版本
      make:
       g++ -o a.o -c a.cpp
       g++ -o b.o -c b.cpp
       g++ -o main.o -c main.o
       g++ -o test a.o b.o main.cpp
      clean:
       rm -rf a.o b.o main.o

    • 第二版本 用变量去替换
      cc = g++
      make:
       $(cc) -o main.o -c main.cpp
       $(cc) -o a.o -c a.cpp
       $(cc) -o b.o -c b.cpp
       $(cc) -o test a.o b.o main.o
      clean:
       rm -rf a.o b.o main.o

    • 第三版本
      版本3可以在每次编译的事后只编译修改过的文件 节省时间
      采用依赖的方式
      start:
       $(cc) -o test a.o b.o main.o
      a.o:
       $(cc) -o a.o -c a.cpp
      b.o:
       $(cc) -o b.o -c b.cpp
      main.o:
       $(cc) -o main.o -c main.cpp
      clean:
       rm -rf a.o b.o main.o

    • 第四版本

    将编译条件改为变量 这样如果以后要修改编译条件的话只需要修改一个地方就可以了

    这里也是和上面一样

    SRSC 表示源文件

    OBJS表示.o文件

    OBJS = $(SRCS:.cpp=.o) 把所有的源文件.cpp替换为.o

    vpath: 用这种方式来确认文件所在的文件位置
    其表示“.c”结尾的文件,先在“foo”目录,然后是“blish”,最后是“bar”目录

    • 其中添加了boost编译选项
      @ 表示目标文件^ 表示所有的依赖文件
      < 表示第一个依赖文件? 表示比目标还要新的依赖文件列表
    
    vpath %.cpp /root/NewFrameTest/Source
    vpath %.h /root/NewFrameTest/Head
    LDDIR = -lboost_system -lboost_thread
    CC = g++ 
    
    SRCS =AsyncSerial.cpp\
            EtcStatus_B0.cpp\
            EtcStatus_B4.cpp\
            EtcStatus_C0.cpp\
            SendDate.cpp\
            SerialTransceiver.cpp\
            BufferedAsyncSerial.cpp\
            EtcContext.cpp\
            EtcStatus_B2.cpp\
            EtcStatus_B5.cpp\
            EtcStatus_Init.cpp\
            MsgQueue.cpp\
            Serial.cpp\
            STLogger.cpp\
            EtcManager.cpp\
            EtcStatus_B3.cpp\
            EtcStatusBase.cpp\
            main.cpp\
            NothingSerialize.cpp\
            Serialize.cpp\
            TcpTransceiver.cpp
    
    
    OBJS = $(SRCS:.cpp=.o)
    EXEC = test
    
    
    make:$(OBJS)
            #$(CC)  -o $(EXEC) $(OBJS) -lboost_system -lboost_thread
            $(CC)  -o $(EXEC) $(OBJS) $(LDDIR)                                                                                                                                                                  
    .cpp.c:
            $(CC) -o $@ -c $<
    clean:
            rm -rf $(OBJS)
    

    相关文章

      网友评论

        本文标题:makefile

        本文链接:https://www.haomeiwen.com/subject/kuasxqtx.html