
CMake怎么写?
CMake的构建
配置
CMake首先需要配置,配置包括C编译器、C++编译器、构建配置参数(Debug|Release)
在CMakeLists.txt目录下执行CMake即可配置,并生成MakeFile。当然也可以在其他文件夹执行cmake /path_to_source 使生成的文件生成到其他文件夹。
CMakeLists.txt
cmake_minimum_required(VERSION 3.5.0)#最低CMake版本要求
project(projectD VERSION 0.1.0 LANGUAGES C CXX)#项目名称
# 启用C++11标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 显示编译指令,不需要看的时候OFF
set(CMAKE_VERBOSE_MAKEFILE OFF)
# 定义宏,不需要的注掉,不要改成OFF,后面只判断是否定义
set(DEF ON)
# 直接定义编译参数,这个会直接加到编译命令后
add_definitions(-DSPDLOG_PRINTF_STYLE -DCMTIHAL_EXPORTS)
# 根据CMAKE_BUILD_TYPE来添加不同的编译参数、命令
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_definitions(-D_DEBUG)
set(CONFIG_DIR "Debug")
else()
set(CONFIG_DIR "Release")
#删除调试信息,这段不能放Debug里,不然调试不了
add_custom_command(TARGET {TARGET_NAME} POST_BUILD
COMMAND{CMAKE_STRIP} {DESTDIR}/lib{TARGET_NAME}.so
)
endif()
if(DEFINED DEF)
#打印配置调试信息,会在执行cmake命令时打印
message("Configuring debug version...")
endif()
# 根据宏来设置目标名称
if(DEFINED DEF)
message("USED FOR DEF version...")
set(TARGET_NAME "DEF")#这将修改构建的目标名称
elseif(DEFINED USED_FOR8X7)
message("USED FOR NOT DEF version...")
set(TARGET_NAME "NOT DEF")
else()
message("USED FOR DIF version...")
set(TARGET_NAME "DIF")
endif()
#设置DESTDIR变量,后续用于生成的目标路径
set(DESTDIR {CMAKE_CURRENT_SOURCE_DIR}/../lib/{CONFIG_DIR})
# 包含目录
include_directories(
{CMAKE_CURRENT_SOURCE_DIR}/../include{CMAKE_CURRENT_SOURCE_DIR}/../common
{CMAKE_CURRENT_SOURCE_DIR}/..{CMAKE_CURRENT_SOURCE_DIR}/
)
# 源文件
set(SOURCES
utils/utils.cpp
InitHalLibrary.cpp
libmain.cpp
)
# 头文件
set(HEADERS
utils/utils.h
InitHalLibrary.h
version.h
)
# 添加目标,SHARED表示生成动态库,STATIC表示静态库,add_executable用于生成可执行文件
add_library({TARGET_NAME} SHARED{SOURCES} {HEADERS})
# 增加自定义命令,POST_BUILD指在构建后执行的脚本,后跟需要执行的命令
add_custom_command(TARGET{TARGET_NAME} POST_BUILD
COMMAND bash {CMAKE_CURRENT_SOURCE_DIR}/postlink.sh{DESTDIR}/lib{TARGET_NAME}.so
)
# 目标属性
set_target_properties({TARGET_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY {DESTDIR}
LIBRARY_OUTPUT_DIRECTORY{DESTDIR}
)
# 编译选项
target_compile_options(${TARGET_NAME} PRIVATE
-Wno-unused-function
-Wno-unused-parameter
)
编译目标
通过下面的命令来启动编译
cmake --build /path_to_builded --config Debug --target all -- -j 2

