CMakeList 编写示例

cmake_minimum_required(VERSION 3.8) #指定cmake的最小版本

set(PROJECT_NAME Untitled_1) #初始化变量

project(${PROJECT_NAME} VERSION 1.0) #创建一个project

set(CMAKE_AUTOMOC ON) #初始化内置变量, 该变量为Qt工程专属变量

set(CMAKE_AUTORCC ON)

set(CMAKE_AUTOUIC ON)

file(HEADERS ${PROJECT_SOURCE_DIR}/include/*.h) #初始化变量, 该变量的值为一个list, 使用*匹配指定目录下的所有以h为扩展名的文件

file(SRC_FILES ${CMAKE_SOURCE_DIR}/src/*.cpp

${PROJECT_SOURCE_DIR}/res/*.qrc) #初始化变量, 该变量使用了多个匹配来赋值,不同匹配使用空格或回车分隔

include_directories(${PROJECT_SOURCE_DIR}/include) #将指定目录加入系统头文件搜索目录中

link_directories({CMAKE_SOURCE_DIR}/lib/{CMAKE_SYSTEM_NAME}/${CMAKE_BUILD_TYPE}) #将指定目录加入系统lib搜索目录中

if(WIN32) #判断系统是否是Windows

add_compile_definitions(_WIN32 _HAS_STD_BYTE=0) #添加预编译变量

add_compile_options(/wd4068 /we4146) #添加编译选项(编译器特定)

add_link_options(/MANIFEST:NO) #添加link选项(编译器特定)

else()

add_compile_definitions(_HAS_STD_BYTE=0)

endif()

set(CMAKE_CXX_STANDARD 20) #设置C++语言标准

set(CMAKE_CXX_STANDARD_REQUIRED ON) #强制启用C++语言标准

find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED) #添加第三方库(或它的子库)

add_executable({PROJECT_NAME} WIN32 {HEADERS} ${SRC_FILES}) #为当前project指定一个编译目标(exe target)

add_library(${PROJECT_NAME} SHARED) #为当前project指定一个编译目标(dll/so target)

set_target_properties(${PROJECT_NAME} PROPERTIES ENABLE_EXPORTS ON) #设置某个的target的属性

target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Gui Qt5::Widgets) #为某个target指定要link的lib

add_custom_command(TARGET {PROJECT_NAME} POST_BUILD COMMAND {CMAKE_COMMAND} -E copy \{PROJECT_NAME}> {CMAKE_BINARY_DIR} #为某个target设置一个后处理事件, <TARGET_FILE:>代表编译输出的exe或dll或lib的绝对路径

COMMAND {CMAKE_COMMAND} -E copy <TARGET_LINKER_FILE:{PROJECT_NAME}\> {CMAKE_BINARY_DIR}/libs) ##为某个target设置第二个后处理事件, $<TARGET_LINKER_FILE:>代表编译输出的dll对应的lib的绝对路径(仅windows有效,因为linux的so文件没有对应的lib

execute_process(COMMAND {CMAKE_COMMAND} -E make_directory {CMAKE_BINARY_DIR}/docs) #解析cmake文件时执行一个命令,此处是一个cmake的默认命令,它代表windows的md或者linux的mkdir

相关推荐
梓䈑2 天前
【CMake】cmake实现属性传递的秘密(目标的默认输出路径 以及 如何修改输出路径)
c++·cmake
梓䈑4 天前
【CMake】cmake的3大核心:目标、属性 和 API(含大量重点函数解析)
c++·cmake
非鱼䲆鱻䲜7 天前
vscode开发stm32添加新的头文件路径和包含源文件
ide·vscode·stm32·cmake·包含头文件·包含源文件
特立独行的猫a8 天前
CMake与GN构建系统对比及GN使用指南
harmonyos·cmake·openharmony·构建·gn
特立独行的猫a9 天前
海思WS63平台CMake构建系统使用指南
cmake·海思·ws63·fbb_ws63
阿拉斯攀登9 天前
【RK3576 安卓 JNI/NDK 系列 05】NDK 构建系统:CMakeLists.txt 从入门到精通
cmake·rk3568·瑞芯微·rk安卓驱动·安卓jni·ndk构建系统
茉莉玫瑰花茶10 天前
CMake 工程指南 - 工程场景(4)
服务器·c++·cmake
茉莉玫瑰花茶10 天前
CMake 工程指南 - 工程场景(5)
开发语言·c++·cmake
Laurence11 天前
CMake 查找、打印 Qt 所有 Components / 模块列表
开发语言·qt·cmake·打印·查找·所有组件·所有模块
梓䈑12 天前
【CMake】CMake工程构建全流程 以及 相关命令行工具的介绍
linux·cmake