c++ cmake

demo1:

cmake_minimum_required(VERSION 3.10)

#定义工程名字
project(projectName)

#定义工程会生成一个可执行程序
add_executable(可执行程序名  源文件名)

#执行CMake命令
$ cmake CMakeLists.txt文件所在的路径
#执行make命令
$ make
-----------------------------------

demo2:
cmake_minimum_required(VERSION 3.10)
project(project1)

#bin目录下存最后生成的可执行文件
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIE}/bin)

#将源码文件.cpp的目录保存在SRC_LIST变量中,注:源码在src文件夹中
aux_source_directory(src  SRC_LIST)

#指定头文件路径
include_directories(include)

#定义工程生成一个可执行程序
add_executable(main  ${SRC_LIST})

--------------------------------------------------------------------------11----------------------------------

# 指定cmake的最低版本
cmake_minimum_required(VERSION 3.26.0)

# 设置项目名称,之后生成的可执行文件或者动态库都是用这个名字,便于修改
# PROJECT_NAME 是全局的工程名
set(PROJECT_NAME "BNE")
# set(LIBRARY_OUTPUT_NAME "BNE")

# 设置整合工程的名字 版本以及一些描述信息
project(${PROJECT_NAME}
        VERSION 0.1.0
        DESCRIPTION "BNE"
        LANGUAGES C CXX
        )
# 编译器配置
## ------------------------------------------ ----------------------------------------------------------------------##

# 设置全局默认值构建动态库
# ON add_library() 默认是生成动态库
# OFF 默认是生成静态库
set(BUILD_SHARED_LIBS ON)

# https://zhuanlan.zhihu.com/p/500002865
# 使用 C++17
set(CMAKE_CXX_STANDARD 17)
# 强制最低的标准为 C++17
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 尝试使用C++扩展 特定编译器特定的语言功能和特性
set(CMAKE_CXX_EXTENSIONS ON)
# 指定C编译器路径
# set (CMAKE_C_COMPILER             "/usr/bin/gcc") # 填写绝对路径
# 设置编译标志
# 使用 C++17
set (CMAKE_C_FLAGS                "-std=c++17")
# 设置在Debug模式时, 编译标志
# -Wall 启用所有警告
# -Wextra 启用所有的额外警告
# -Wno-unused-parameter 忽略未使用参数的警告
# -O1 -O2 -O3 -Os 不同的优化等级
# -gggdb gdb调试
set (CMAKE_C_FLAGS_DEBUG          "-g -Wall -Wextra -Wno-unused-parameter -copy-dt-needed-entries")
# MINSIZEREL版本 生产环境优化代码 便于生产环境有调式信息,便于调试
set (CMAKE_C_FLAGS_MINSIZEREL     "-Os -g -Wall -Wextra")
# Release版本 通过设置 CMAKE_BUILD_TYPE来指定
set (CMAKE_C_FLAGS_RELEASE        "-O4 -DNDEBUG")
# 生成带有调试信息的Release版本
set (CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")

# 同上
# set (CMAKE_CXX_COMPILER             "/usr/bin/g++") # 填写绝对路径
set (CMAKE_CXX_FLAGS                "-std=c++17")
set (CMAKE_CXX_FLAGS_DEBUG          "-g -Wall -Wextra -Wno-unused-parameter")
set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -g -Wall -Wextra")
set (CMAKE_CXX_FLAGS_RELEASE        "-O4 -DNDEBUG")
set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")

# 设置输出文件目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/out)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/out/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/out)

# 编译类型
# Debug Release MINSIZEREL RELWITHDEBINFO
# 指定默认为Debug
if(NOT DEFINED BUILD_TYPE OR NOT DEFINED CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Debug)
    message("use default build type: ${CMAKE_BUILD_TYPE}")
endif()

# 生成 compile_commands.json
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# 设置版本文件
configure_file(VersionConfig.h.in "${PROJECT_SOURCE_DIR}/common/include/${PROJECT_NAME}_version.h")
# 记录编译时间
string(TIMESTAMP COMPILE_TIME %Y%m%d-%H%M%S)

## -----------------------------------------------------------------------------------------------------------------##
# unit test
include(CTest)
if(BUILD_TESTING)
    include(GoogleTest)
    enable_testing()

    set(CTEST_OUTPUT_ON_FAILURE TRUE)
    set(GTEST_COLOR TRUE)
endif()

mark_as_advanced(
    BUILD_GMOCK BUILD_GTEST BUILD_SHARED_LIBS 
    gmock_build_tests gtest_build_samples gtest_build_tests
    gtest_disable_pthreads gtest_force_shared_crt gtest_hide_internal_symbols
)

## ---------------------------------------------------------------------- ----------------------------------------------##

# opencv lib 目录
set(OpenCV_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_libs/opencv/release")
message(${CMAKE_BUILD_TYPE})
if(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
    set(OpenCV_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_libs/opencv/debug")
endif()

## ---------------------------------------------------------------------------------------------------------------##
# 工具
include(${CMAKE_SOURCE_DIR}/CMake/utils.cmake)

## -----------------------------------------------------------------------------------------------------------------##
if(NOT DEFINED BUILD_SELECT)
    set(BUILD_SELECT "ALL;")
endif(NOT DEFINED BUILD_SELECT)
string(REPLACE "," ";" BUILD_SELECT ${BUILD_SELECT})

message("Select to Build: ")
foreach(SELECT ${BUILD_SELECT})
    message("   -----   ${SELECT}")
endforeach()

## ------------------------------------------------------------------------------------------------------------------##
# alogorithm
add_sub(common/algorithm)

# MaskAlignService
add_sub(MaskAlignService)

# MaskAlignApp
add_sub(MaskAlignApp)

## --------------------------------------------------------------------------------------------------------------------##
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值