【CMake】一个C++的常用的CMake模板解析

目录结构

D:
├─bin
|
├─build
│  
├─buildX86
│  
├─include
|
└─MyMath

CMakeLists代码

可执行文件的CMakeLists代码

cmake_minimum_required(VERSION 3.20)

# 项目工程名称如果不额外指定可执行程序或者生产库的名字那么项目工程名称将会作为可执行库或者生产库的名称
project(UseMyMath)

# 判断生成文件的位数用于控制最后生成文件的路径
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
    set(ARCH "x64")
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/bin/${ARCH}/Debug)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/bin/${ARCH}/Release)
else()
    set(ARCH "x86")
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/bin/${ARCH}/Debug)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/bin/${ARCH}/Release)
endif()

# MyMath是自己写的动态链接库,它被可执行文件链接,通过 add_subdirectory 添加子工程
add_subdirectory(MyMath)

# 生成可执行文件的依赖文件
add_executable(${CMAKE_PROJECT_NAME} 
    main.cpp
    include/MyMath.h
)

# 设置头文件包含目录
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)

# 设置库文件搜索目录
target_link_directories(UseMyMath PRIVATE
    $<$<CONFIG:Debug>:${CMAKE_CURRENT_SOURCE_DIR}/bin/${ARCH}/Debug>
    $<$<CONFIG:Release>:${CMAKE_CURRENT_SOURCE_DIR}/bin/${ARCH}/Release>
)

# 设置要链接的库
target_link_libraries(UseMyMath PRIVATE 
    MyMath
)

子工程的CMakeLists代码

cmake_minimum_required(VERSION 3.20)

project(MyMath)

# 添加宏定义用于导出动态链接库符号和使用动态链接库
add_compile_definitions(MyMath_Dll)

if(CMAKE_SIZEOF_VOID_P EQUAL 8)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/../bin/${ARCH}/Debug)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/../bin/${ARCH}/Release)
else()
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/../bin/${ARCH}/Debug)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/../bin/${ARCH}/Release)
endif()

add_library(MyMath SHARED
    MyMath.cpp
    MyMath.h
)

# 在MyMath被链接前将头文件拷贝到固定目录,用于之后的 MyMath目标编译
add_custom_command(TARGET MyMath 
                    PRE_LINK
                    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/MyMath.h ${CMAKE_CURRENT_SOURCE_DIR}/../include
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值