CMakeLists.txt模板

#win平台执行命令“cmake -G "MinGW Makefiles" .”进行cmake,之后执行命令“mingw32-make”进行make

# 声明cmake工程的名字,同时声明本项目是一个C/C++项目(必须)

project(add LANGUAGES C CXX)

# 打印相关消息消息

MESSAGE(STATUS "Project: add")

# 声明cmake的最低版本

cmake_minimum_required(VERSION 3.4)

message(STATUS "Current Cmake Version > VERSION 3.4")

# 设置CMake的build模式为DEBUG

# Debug(调试):此build type通常用于开发和调试阶段。它包含了调试信息,不进行任何优化,以便在调试时能够更轻松地追踪代码。

# Release(发布):Release build type通常用于生产环境中。它会启用各种优化选项,以提高代码的执行速度和效率。

# RelWithDebInfo(发布带调试信息):这种build type结合了Release和Debug的特性,旨在提供一种较好的优化效果同时保留调试信息,以便在需要时进行调试。

# MinSizeRel(最小体积发布):MinSizeRel build type旨在最小化可执行文件的大小,通常会启用一些针对代码大小的优化。

#SET(CMAKE_BUILD_TYPE Debug)

SET(CMAKE_BUILD_TYPE "Debug")

#SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")

#SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

# 打印设置的编译模型信息

MESSAGE("Build type: " ${CMAKE_BUILD_TYPE})


 

# 添加c++11标准支持 【可选】

set( CMAKE_CXX_FLAGS "-std=c++17")

# 检查C++版本 【可选】 , Check C++11 or C++0x support

include(CheckCXXCompilerFlag)

CHECK_CXX_COMPILER_FLAG("-std=c++17" COMPILER_SUPPORTS_CXX17)

CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)

if(COMPILER_SUPPORTS_CXX17)

   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")

   add_definitions(-DCOMPILEDWITHC17)

   message(STATUS "Using flag -std=c++17.")

elseif(COMPILER_SUPPORTS_CXX0X)

   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")

   add_definitions(-DCOMPILEDWITHC0X)

   message(STATUS "Using flag -std=c++0x.")

else()

   message(FATAL_ERROR "Compiler check failed.")

endif()


 

# 将main之外的c/cpp文件编译成库文件(动态/静态),方便日后其他项目链接使用,

set(LIB_NAME addNums)

#可以用add_library创建库对象

set(SRC_ADD_CPP ${PROJECT_SOURCE_DIR}/src/add.cpp)

add_library(${LIB_NAME} STATIC  ${SRC_ADD_CPP})

# 指定库代码包含的include头文件目录

target_include_directories(${LIB_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/include)

# 如果自己的库依赖了三方库,需要 target_link_libraries 链接使用到的三方库(可选)

#target_link_libraries(my_shared_lib PRIVATE some_other_lib)


 

# 将函数入口,及涉及的所有cpp/c源代码写在参数中,触发cmake进行编译,生成exe可执行文件,一个exe对应一个add_executable

set(SRC_MAIN_CPP ${PROJECT_SOURCE_DIR}/src/main.cpp)

add_executable(${PROJECT_NAME} ${SRC_MAIN_CPP} )

target_compile_options(${PROJECT_NAME} PRIVATE -g)

# 如果代码中使用了.a或者.so等三方库,需要使用下述命令查找库

# find_library(EXTERNAL_LIB_NAME_VAR1 EXTERNAL_LIB_NAME1.a PATH_TO_EXTERNAL_LIB_NAME1)

# 将编译后的exe可执行程序,和所需库文件(动态库/静态库)进行链接(可选,如果没用到三方库不需要编写target_link_libraries)

target_link_libraries(${PROJECT_NAME} ${LIB_NAME})

# 设置自己的静态库,动态库,和最终生成的.exe可执行文件的输出路径

set_target_properties(${LIB_NAME} ${PROJECT_NAME} PROPERTIES

    #设置静态库输出路径

    ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib

    ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/lib

    ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/lib

    #设置动态库输出路径

    LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib

    LIBRARY_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/lib

    LIBRARY_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/lib

    #设置可执行文件输出路径

    RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin

    RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/bin

    RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/bin

)

MESSAGE(STATUS "Set .lib/.a  output dir: ${PROJECT_SOURCE_DIR}/lib")

MESSAGE(STATUS "Set .dll/.so output dir: ${PROJECT_SOURCE_DIR}/lib")

MESSAGE(STATUS "Set .exe     output dir: ${PROJECT_SOURCE_DIR}/bin")



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值