zoukankan      html  css  js  c++  java
  • 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= 指定路径和库名即可,在程序动态运行的时候会自动去寻找)

    注意:

    变量后面不要加上空格

  • 相关阅读:
    redis持久化的方式RDB 和 AOF
    centos7搭建mysql-5.7.22主从复制
    Vue项目上线后刷新报错404问题(apache,nginx,tomcat)
    Zabbix监控华为交换机
    Zabbix数据库清理历史数据
    MySQL增删改查基本语句
    什么是SQL注入式攻击?
    .NET面试题(二)
    .NET面试题(一)
    .NET面试题(三)
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/13647173.html
Copyright © 2011-2022 走看看