cmake的简单使用
cmake_minimum_required(VERSION 3.24)
project(leveldb VERSION 1.23.0 LANGUAGES C CXX)
# 设置其他cmake路径
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
# C++标准
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# 默认build类型
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
# 从VERSION文件中读取版本
file(READ "${CMAKE_SOURCE_DIR}/VERSION" VERSION)
string(STRIP "${VERSION}" VERSION)
# 可选,引入config
set(INSTALL_CONFIG_NAME ${PROJECT_NAME}-config)
# 除非暴露,否则隐藏符号,减少大小
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_CXX_VISIBLITY_INLINES_HIDDEN ON)
# 设置一些目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
if(UNIX)
# -fPIC 生成位置无关代码
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
if(BUILD_TESTS)
# --coverage 开启代码覆盖率报告
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage")
endif()
endif()
if(MSVC)
add_compile_options(/utf-8 /wd4819)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:__cplusplus")
endif()
# 生成compile_commands.json
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# 生成文档
if(BUILD_DOCUMENT)
message(STATUS "gen document ...")
set(DOC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/document)
if(WIN32)
execute_process(COMMAND ${DOC_DIR}/doxygen/build.bat ${DOC_DIR}/doxygen WORKING_DIRECTORY ${DOC_DIR}/doxygen)
elseif(UNIX)
execute_process(COMMAND ${DOC_DIR}/doxygen/build.sh ${DOC_DIR}/doxygen WORKING_DIRECTORY ${DOC_DIR}/doxygen)
execute_process(COMMAND ${DOC_DIR}/sphinx-cn/build.sh ${DOC_DIR}/sphinx-cn WORKING_DIRECTORY ${DOC_DIR}/sphinx-cn)
endif()
endif()