• Makefile模板


    文件结构如下:

    其中,前两个.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= 指定路径和库名即可,在程序动态运行的时候会自动去寻找)

    注意:

    变量后面不要加上空格

  • 相关阅读:
    Storm分布式实时流计算框架相关技术总结
    上手开源项目的几点建议【转】
    笔试面试的路上——努力ing
    Storm配置项详解【转】
    storm UI
    leetcode-单词探索
    leetcode-全排列详解(回溯算法)
    leetcode-生成括号(回溯算法)
    leetcode-递增的三元子序列
    leetcode-最长无重复字符的子串
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/13647173.html
Copyright © 2020-2023  润新知