• 【每天一个cmake技巧】简单的cmake demo


    简单的cmake demo

    一个简单的cmake 工程,包括生成动态库和链接动态库的demo工程和test工程。
    demo下载链接: https://download.csdn.net/download/sinat_35178307/87243966

    目录结构

    该工程可以生成一个dll,一个调用dll的demo,一个test dll接口的工程。
    在这里插入图片描述

    • build :cmake生成目录,过程文件保存在该目录下,output保存在build/build目录下
    • include:包含dll需要 头文件
    • src: 包含生成dll的源码文件
    • test: 包含测试dll的main.cpp和cmake文件
    • demo:包含调用dll的main.cpp和cmake文件

    最顶层cmake

    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.7.0)
    
    # project name
    project(cmakeDemo)
    
    message(STATUS "----------------------------------------------------------")
    message(STATUS "PROJECT_SOURCE_DIR          =    " ${PROJECT_SOURCE_DIR})
    
    set(BINARY_DIR ${PROJECT_SOURCE_DIR}/build/build/bin/)
    set(LIBRARY_DIR ${PROJECT_SOURCE_DIR}/build/build/lib)
    
    # set bin dir
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BINARY_DIR})
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BINARY_DIR})
    
    #set lib dir
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${LIBRARY_DIR})
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${LIBRARY_DIR}) 
    
    message(STATUS "BINARY_DIR                  =    " ${BINARY_DIR})
    message(STATUS "LIBRARY_DIR                 =    " ${LIBRARY_DIR})
    
    set(INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/include)
    message(STATUS "INCLUDE_DIRS                =    " ${INCLUDE_DIRS})
    
    add_subdirectory(demo)
    add_subdirectory(src/dll_src)
    add_subdirectory(test/test_dll)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    include 文件夹

    该目录下存放生成动态库的头文件

    src文件夹

    该目录下存放生成动态库的源码文件和cmake文件,该cmake文件会最终生成hello.dll

    add_definitions(-DLICENSEVERIFY_EXPORTS)
    set(HEADERS ${INCLUDE_DIRS}/hello.h )
    add_library (hello SHARED ${HEADERS} hello.cpp )
    target_compile_definitions(hello PRIVATE WIN_EXPORTS)
    target_include_directories(hello PRIVATE ${INCLUDE_DIRS})
    
    • 1
    • 2
    • 3
    • 4
    • 5

    test文件夹

    该目录下存放生成test_dll工程的源码文件和cmake文件,该cmake文件中会链接hello.dll文件

    add_executable(test_dll test_dll.cpp)
    target_include_directories(test_dll PRIVATE ${INCLUDE_DIRS})
    target_link_libraries(test_dll  hello)
    add_dependencies(test_dll  hello)
    
    • 1
    • 2
    • 3
    • 4

    demo

    和test目录下的文件类似,生成helloDemo.exe

    #./demo/CMakeLists.txt
    add_executable(HelloDemo  main.cpp )
    target_include_directories(HelloDemo PRIVATE ${INCLUDE_DIRS})
    target_link_libraries(HelloDemo LicenseVerify)
    add_dependencies(HelloDemo LicenseVerify )
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    产业互联网,正在进入到深水区,人们对于产业互联网的认识才能够全面
    Python实现将文件夹下的所有pdf文件合并成一个pdf文件,并用文件夹名字命名
    数学建模 线性规划 遗传算法
    第73期:图论-2022/7/19学习报告
    04 动力云客之登录后获取用户信息+JWT存进Redis+Filter验证Token + token续期
    Golang并发控制的三种方案
    C语言中的常量、变量及关键字
    黑白照片修复彩色软件免费有哪些?分享这三个实用的软件给你
    16. Thymeleaf教程(10分钟入门)
    arch_linux 虚拟机安装
  • 原文地址:https://blog.csdn.net/sinat_35178307/article/details/128186487