• c++ 的makefile文件实例


    首先声明, 感谢九哥的帮助,因为从来没写过makefile, 所以一直是手动编译,

    然后有一次写了三个文件, 需要编译, 而我只编译了一个文件, 所以一直出错, 九哥告诉我用makefile更方便, 可以学习一下

    于是我就写了看了很多的blog, 然后向九哥要了这么个东西, 据说还有可以生成的工具

    ###########################################
    #Makefile for simple programs
    ###########################################
    #INC 是你项目包含的目录
    INC=
    #LIB是你需要链接的库
    LIB= -lpthread
    #CC是一个变量名 可以随便起,这里代表你的编译器
    CC=g++
    #LINK是链接的程序
    LINK=g++
    #LDFLAGS是链接的选项
    LDFLAGS=
    #CC_FLAG 是编译选项
    CC_FLAG=-Wall -m64
    
    # PRG=操作符重载, 这里是目录名字
    PRG=aa
    # 这里是空格隔开, 不能是逗号,需要注意
    # root@corleone:/opt/code/testC++/aa# ls
    # makefile  mytime0.cpp  mytime.h  usertime0.cpp
    # 上面这是目录下的文件, 那需要写几个.o的文件呢? 就这么写
    OBJ=mytime0.o  usertime0.o
    
    
    #当你make 后 编译器会去找 $(XXXX):$(xxxx) 的那一行
    #你会发现它下面是一个 table缩进,  table缩进 表示要执行那个命令
    #然后编译器会查看 "-o $@" 后面的目标有没有生成或者更新,没有就重新编译那个目标文件
    #比如这里$(OBJ)是各种.o文件, 那么就会先编译这些.o文件 会去执行.cpp.o:下面的缩进命令
    
    $(PRG):$(OBJ)
        $(CC) $(INC) $(LIB) -o $@ $(OBJ)
    
    #.SUFFIXES表示后缀名
    #这里表示要把INC下面的所有后缀是cpp或者c的编译成.o文件
    .SUFFIXES: .c .o .cpp
    .cpp.o:
        $(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o
    
    
    .PRONY:clean
    clean:
        @echo "Removing linked and compiled files......"
        rm -f $(OBJ) $(PRG)
    ###########################################
    #Makefile for simple programs
    ###########################################
    #INC 是你项目包含的目录
    INC=
    #LIB是你需要链接的库
    LIB= -lpthread
    #CC是一个变量名 可以随便起,这里代表你的编译器
    CC=g++
    #LINK是链接的程序
    LINK=g++
    #LDFLAGS是链接的选项
    LDFLAGS=
    #CC_FLAG 是编译选项
    CC_FLAG=-Wall -m64
    
    PRG=threadpooltest
    OBJ=CThreadManage.o CThreadPool.o CThread.o CWorkerThread.o threadpooltest.o
    
    
    #当你make 后 编译器会去找 $(XXXX):$(xxxx) 的那一行
    #你会发现它下面是一个 table缩进,  table缩进 表示要执行那个命令
    #然后编译器会查看 "-o $@" 后面的目标有没有生成或者更新,没有就重新编译那个目标文件
    #比如这里$(OBJ)是各种.o文件, 那么就会先编译这些.o文件 会去执行.cpp.o:下面的缩进命令
    
    $(PRG):$(OBJ)
        $(CC) $(INC) $(LIB) -o $@ $(OBJ)
    
    #.SUFFIXES表示后缀名
    #这里表示要把INC下面的所有后缀是cpp或者c的编译成.o文件
    .SUFFIXES: .c .o .cpp
    .cpp.o:
        $(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o
    
    
    .PRONY:clean
    clean:
        @echo "Removing linked and compiled files......"
        rm -f $(OBJ) $(PRG)
    
    
    
    ###########################################
    #这里举个复杂的例子
    ###########################################
    
    #1    先找到$(XXXX):$(xxxx)
    #2    去找"-o $@" 后面的目标有没有生成或者更新,有就重新编译那个目标
    #3    "-o $@" 后面所有的目标都好了就开始链接主程序了
    #    编译和链接都需要一些选项
    #4    >> output表示输出重定向到文件,这样出错了比较好查找
    all_objs= xxx1.o ../xxx2.o ../../xxx3.o
    #all_libs是链接的库, -L指定库的目录, -l指定库的名字
    all_libs=-L../../sourceapp/qmarket/xykjclient/  -lMarketApi  -lACE
    #$(target): $(all_objs)
    #    $(LINK) $(LDFLAGS) -o $@ $(all_objs) $(all_libs) $(LIB) >> output
    
    #你可以自己加一些选项 比如下面的test  你在命令行 执行 make test,他就会执行那个缩进的命令
    test:
        @echo "this is test"
    View Code
  • 相关阅读:
    USACO2.2 Preface Numbering【思维+打表】
    USACO2.1 Hamming Codes【枚举+二进制处理+输出格式+题意理解】
    USACO1.6 Healthy Holsteins【dfs/bfs 爆搜】
    USACO1.5 Mother's Milk【搜索】
    USACO1.6 Number Triangles [dp-简单dp]
    USACO1.6 回文质数 Prime Palindromes
    泛型简介
    涉及 C#的 foreach问题
    c#委托事件及其讲解
    WPF 打印 包括设置,打印预览,打印等等
  • 原文地址:https://www.cnblogs.com/renfanzi/p/9213421.html
Copyright © 2020-2023  润新知