未分类

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

留言

您的电子邮箱地址不会被公开。 必填项已用*标注