当前位置 博文首页 > 文章内容

    Makefile模板

    作者: 栏目:未分类 时间:2020-09-10 18:01:31

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    文件结构如下:

     

    其中,前两个.so文件为动态库文件(还是静态库?),.h文件都是库的头文件,.cpp文件是我使用的调用文件

     

    makefile编写如下:

    ofd_test:OFD_test.cpp ofdsdk.h
        g++ OFD_test.cpp ofdsdk.h -o ofd_test -lsw3 -lswofdsdk
    
    .PHONY:clean
    clean:
        rm -r ofd_test

     

    这是最简单的一种写法,下面是一种通用的makefile写法

     

    首先是文件结构:

     

    对应的makefile文件

    DIR_INC=./include
    DIR_SRC=./src
    DIR_OBJ=./obj
    DIR_BIN=./bin
    DIR_LIB=./lib
    
    LIBS=-lsw3 -lswofdsdk
    
    SRC = $(wildcard ${DIR_SRC}/*.cpp)
    OBJ = $(patsubst %.cpp, ${DIR_OBJ}/%.o, $(notdir ${SRC}))
    
    TARGET=ofd_test
    BIN_TARGET=$(DIR_BIN)/$(TARGET)
    INCLUDE=-I ${DIR_INC}
    CFLAGS = -g -Wall 
    
    ${BIN_TARGET}:${OBJ}
        g++  ${CFLAGS} ${INCLUDE} ${OBJ} ${LIBS} -o $@
    
    ${DIR_OBJ}/%.o:${DIR_SRC}/%.cpp 
        g++ ${CFLAGS} ${INCLUDE} -c $< -o $@
    
    .PHONY:clean
    clean:
        rm -rf ${DIR_OBJ}/*.o ${BIN_TARGET}

    ps:makefile1是测试失败的文件,不用管。

     

    makefile介绍

    1.带 = 号的都是赋值操作,可以使用 $() 或者 ${} 把赋予其中的变量值给取出来。

    2.wildcard和patsubst是两个makfile格式的函数,作用是匹配和替换作用。

      其中两句代码的意思是:

      把./src 文件夹下的所有 .cpp文件名都赋予 SRC变量

      把SRC里面的所有.cpp文件名都替换成 .o文件名 赋给 OBJ 变量

    在该实例中,SRC = OFD_test.cpp OBJ = OFD_test.o

    如果有多个cpp文件,比如多个 main.cpp 那么对应的 SRC = OFD_test.cpp main.cpp OBJ = OFD_test.o main.o (没有打印测试过,但是我猜应该是这样)

     

    其他的部分都是一些基础的makefile文件内容

    需要注意的是,编译的时候需要加上 -I 头文件包含路径,-L 静态库路径 以及 动态库库名

    静态库需要在生成 .o 的过程中加上,动态库只需要在生成可执行程序的过程添加。(暂时存疑,应该是静态库在生成可执行文件的过程添加,动态库只需要 -Wl,-rpath= 指定路径和库名即可,在程序动态运行的时候会自动去寻找)

     

    注意:

    变量后面不要加上空格