• cmake 学习使用笔记(三)


    目录

    使用工具

    add_subdirectory---关联子构建系统

     示例1:子系统生成静态库

    使用:


            

    使用工具

            开发工具:VS2019、clion、cmake

            平台: win

    add_subdirectory---关联子构建系统

    多编译系统,即多个CMakeList.txt,非顶级的构建都属于子构建系统。

    1. add_subdirectory(source_dir [binary_dir]
    2. [EXCLUDE_FROM_ALL])

    参数详解:   

    • source_dir:必选参数。子编译系统目录,该参数指定一个子目录,子目录下应该包含CMakeLists.txt文件和代码文件。
    • binary_dir:可选参数;该参数指定一个目录,用于存放输出文件。可以是相对路径也可以是绝对路径,如果是相对路径,则是相对当前输出目录的一个相对路径。binary_dir是用于指定source_dir经过编译后的输出文件的目录。如果未指定,则默认使用source_dir路径。
    • EXCLUDE_FROM_ALL :可选参数。将指定目录排除编译;当指定了该参数,则子目录下的目标不会被父目录下的目标文件包含进去,父目录的CMakeLists.txt不会构建子目录的目标文件,必须在子目录下显式去构建。注意:当父目录的目标依赖于子目录的目标,则子目录的目标仍然会被构建出来以满足依赖关系(例如使用了target_link_libraries)例外

    例如:我用 vs 2019 创建的项目

     新建项目时选择将解决方案和项目放在同一目录时。

     

     示例1:子系统生成静态库

     addSubdirectoryTest.h

    1. #ifndef ADD_SUBDIRECOTRY_TEST_H_
    2. #define ADD_SUBDIRECOTRY_TEST_H_
    3. void test();
    4. #endif

     addSubdirectoryTest.cpp

    1. #include
    2. #include "addSubdirectoryTest.h"
    3. void test() {
    4. std::cout << "子项目测试" << std::endl;
    5. }

    CMakeLists.txt 文件内容:

    cmake_minimum_required (VERSION 3.8)
    project(addSubdircotryTest)

    aux_source_directory(. DIR_MY_LIB_TEST)

    add_library(addSubdircotryTest ${DIR_MY_LIB_TEST})
    #add_library(addSubdircotryTest addSubdirectoryTest.cpp)

    主项目CmakeList.txt 文件:

     全部代码:

    1. # CMakeList.txt: cPulsPlusTestProject 的 CMake 项目,在此处包括源代码并定义
    2. # 项目特定的逻辑。
    3. #
    4. #注意:cmake的语法支持大小、小写和大小写混合上边的代码中我们使用的cmake语法是小写的.
    5. #project(cPlusPlusTestProject1)
    6. cmake_minimum_required (VERSION 3.8)
    7. # 设置系统自带变量
    8. set(cmake_cxx_standard 11)
    9. #SET( CMAKE_CXX_FLAGS "-std=c++11 -O3")
    10. if(CAMKE_SYSTEM_NAME STREQUAL "Linux")
    11. set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-std=c++11 -pthread")
    12. elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
    13. #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fexec-charset=GBK")
    14. endif()
    15. #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fexec-charset=GBK")
    16. #include_directories(./Header)
    17. #include_directories(./Header/ThreadTest ./Header/OpteratorOverloadTest)
    18. #设置头文件搜索路径
    19. set(myHeadPath "${CMAKE_CURRENT_SOURCE_DIR}/Header")
    20. include_directories(${myHeadPath})
    21. set (cPlusPlusTest_version_major 1.9)
    22. set (cPlusPlusTest_version_minor 1.5)
    23. configure_file(
    24. "${PROJECT_SOURCE_DIR}/cPlusPlusTestConfig.h.in"
    25. "${PROJECT_BINARY_DIR}/cPlusPlusTestConfig.h"
    26. )
    27. add_definitions(-DMyDebug)
    28. include_directories(${PROJECT_BINARY_DIR})
    29. include_directories(${PROJECT_SOURCE_DIR}/3dPart/3dInclude)
    30. link_directories(${PROJECT_SOURCE_DIR}/3dPart/lib)
    31. link_directories(${PROJECT_SOURCE_DIR}/output)
    32. #link_libraries()
    33. #link_directories(../3dPart/lib)
    34. #link_libraries(${PROJECT_SOURCE_DIR}/3dPart/lib/MyMathFunctions.lib)
    35. # 将源代码添加到此项目的可执行文件。
    36. # 查找当前目录下的所有源文件
    37. # 并将名称保存到 DIR_SRCS 变量
    38. add_subdirectory(subProjectTest ${PROJECT_SOURCE_DIR}/output/lib)
    39. add_executable (cPlusPlusTestProject "Source/cPlusPlusTestProject.cpp" "Header/cPlusPlusTestProject.h" "Header/ThreadTest/multipleThreadTest.h" "Source/ThreadTest/multipleThreadTest.cpp" "Header/ThreadTest/calculateTest.h" "Source/ThreadTest/calculateTest.cpp" "Header/ThreadTest/calculateTest2.h" "Source/ThreadTest/calculateTest2.cpp" "Header/OpteratorOverloadTest/OverloadOperatorTest.h" Source/PerformanceTest/RelevantSizeFuncTest.cpp Header/PerformanceTest/RelevantSizeFuncTest.h)
    40. #target_link_directories(cPlusPlusTestProject PUBLIC ${PROJECT_SOURCE_DIR}/3dPart/lib)
    41. #target_link_libraries(cPlusPlusTestProject ${PROJECT_SOURCE_DIR}/3dPart/lib/libMyMathFunctions.a)
    42. #target_link_libraries(cPlusPlusTestProject ${PROJECT_SOURCE_DIR}/3dPart/lib/LibTest.lib)
    43. target_link_libraries(cPlusPlusTestProject MyMathFunctions)
    44. target_link_libraries(cPlusPlusTestProject addSubdircotryTest)
    45. #target_link_libraries(cPlusPlusTestProject ${PROJECT_SOURCE_DIR}/3dPart/lib/libMyMathFunctions.dll.a)
    46. #target_link_libraries(cPlusPlusTestProject ${PROJECT_SOURCE_DIR}/3dPart/lib/libMyMathFunctions.dll)
    47. # TODO: 如有需要,请添加测试并安装目标。

    使用:

    引入头文件:

     运行结果:

  • 相关阅读:
    几种预训练模型微调方法和peft包的使用介绍
    PMP备考大全:经典题库(敏捷管理第2期)
    Word2Vec 实践
    VUE 项目 nginx部署
    HTML+CSS个人电影网页设计——电影从你的全世界路过(4页)带音乐特效
    基于web的医院预约挂号系统/医院管理系统
    Apollo 应用与源码分析:Monitor监控 - 基本概念与入口分析
    定速巡航在TruckSim中仿真应用
    深入理解 Spring 事务:入门、使用、原理
    idea手动创建webapp(在main文件夹下)
  • 原文地址:https://blog.csdn.net/qq_41722795/article/details/125794199