zoukankan      html  css  js  c++  java
  • CMakeList.txt(3): 一个cmake实例

    介绍一个比较实用的例子,即包含生成静态库又包含引入外部头文件和链接库的cmake demo。

    先按照工程规范建立工程目录,并编写代码,以下面的工程目录为例进行解释这个例子,工程的目录结构为:

     

     

    1. 编写CMakeLists.txt

    由于一个工程目录中包含多个项目,其中在此项目中包含util项目和main项目,其中util项目是用以生成main程序需要的静态库,main是用以生成可执行文件。

    在工程项目中的父目录向有一个CMakeLists.txt是用以声明定义工程需要的Cmake设置还定义了子目录src,用以递归的调用src中的MakeLists.txt。

    1) 工程目录的CMakeLists.txt内容定义如下:

    PROJECT(HELLO)           定义工程的名称

    ADD_SUBDIRECTORY(src)  用以递归的调用src中的MakeLists.txt

     

    2)src里面的CMakeLists.txt内容定义如下:

    ADD_SUBDIRECTORY(main)  用以递归的调用main中的MakeLists.txt
    ADD_SUBDIRECTORY(util)  用以递归的调用util中的MakeLists.txt

     

    3)util目录里面的CMakeLists.txt是用以定义生成util静态库的规则,其中内容如下:

    SET(LIBRARY_OUTPUT_PATH ${HELLO_SOURCE_DIR}/lib)     定义了库生成的路径,LIBRARY_OUTPUT_PATH是一个内部变量,存放库生成路径

    SET(CMAKE_C_COMPILER g++)  定义编译器

    SET(SRC_LIST hello.c)  定义库文件需要的源文件

    INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/include)  定义非标准库头文件要搜索的路径

    ADD_LIBRARY(util STATIC ${SRC_LIST})

     

    4)在main目录中的CMakeLists.txt是用来定义可执行程序编译和链接时所需要的一些命令或环境。内容如下:

    SET(EXECUTABLE_OUTPUT_PATH ${HELLO_SOURCE_DIR}/bin)  定义执行文件输出路径

    SET(SRC_LIST main.cpp)   定义库文件需要的源文件

    INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/include)   定义非标准库头文件要搜索的路径

    LINK_DIRECTORIES(${HELLO_SOURCE_DIR}/lib)      定义依赖静态库要搜索的路径

    ADD_EXECUTABLE(hello ${SRC_LIST})  生成执行文件

    TARGET_LINK_LIBRARIES(hello util)  TARGET_LINK_LIBRARIES用以定义链接时需要的库文件。

     

    2.在工程目录下创建build目录,并采用out-of-source方式编译项目。执行命令cmake ..,执行结果如下:

    3)然后进行make

     

    4)安装

    重新编辑工程目录下的CMakeLists.txt。在CMakeLists.txt中添加如下命令:

    INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake_demo)

    INSTALL(PROGRAMS run.sh DESTINATION bin)

    INSTALL(PROGRAMS bin/hello DESTINATION bin)

    INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake_demo)

    这些命令表示在执行make install命令时,安装程序会拷贝相应的文件、目录或程序到指定的前缀开始的目录中

    cmake执行命令如下:cmake -DCMAKE_INSTALL_PREFIX=~/data/cmake_demo ..

    这时将工程目录安装到~/data/cmake_demo目录下。执行结果如下:

     

     

     

     

     

  • 相关阅读:
    30张图解: TCP 重传、滑动窗口、流量控制、拥塞控制
    ffmpeg rtp时间戳
    35 张图解:被问千百遍的 TCP 三次握手和四次挥手面试题
    Pinpoint 分布式系统性能监控工具
    图解正向代理、反向代理、透明代理
    实战!我用 Wireshark 让你“看见“ TCP
    IE7的增强插件:IE7Pro
    Net Core 中的HTTP协议详解
    Autofac是一个轻量级的依赖注入的框架
    关于表数据的复制插入TSQL
  • 原文地址:https://www.cnblogs.com/bitter-first-sweet-last/p/5978177.html
Copyright © 2011-2022 走看看