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)
## --------------------------------------------------------------------------------------------------------------------##