Cmake构建工程设计——Cmake编写规则

本文介绍了CMake构建工程的基本规则,包括CMake变量的使用,如option和set,以及如何传参。文章还详细讲解了如何读取配置文件,设置工程,以及条件判断和循环结构的实现。此外,还讨论了如何根据系统类型进行判断,显示编译信息,使用预定义宏add_definitions以及创建和调用函数的方法。
摘要由CSDN通过智能技术生成

Cmake的命令不区分打下写,例如message,set等命令;但Cmake的变量区分大小写。
为统一风格,本次的Cmake命令全部采用小写,变量全部采用大写加下划线组合

Cmake变量

Cmake变量可用关键字set赋值,可以将变量赋值为开关,数字,字符串,列表形式,在之后的Cmake中会多次用到。
option为开关选项,通常作编译开关。

示例代码

option(OPEN_TEST "open test" ON)
set(FALSE_TEST FALSE)
set(NUMBER_TEST 3.14)
set(STRING_TEST "Cmake Test")
set(SOURCE_LIST_TEST main.cpp module1.cpp module2.cpp)
if (OPEN_TEST)
	message(STATUS "open test: ${OPEN_TEST}")
endif()

if (NOT FALSE_TEST)
	message(STATUS "false test: ${FALSE_TEST}")
endif()

message(STATUS "number test: ${NUMBER_TEST}")
message(STATUS "string test: ${STRING_TEST}")
message(STATUS "code list test: ${SOURCE_LIST_TEST}")

执行结果

-- open test: ON
-- false test: FALSE
-- number test: 3.14
-- string test: Cmake Test
-- code list test: main.cpp;module1.cpp;module2.cpp

变量的集合会以“;”隔开

Cmake传参

执行cmake命令时,Cmake可以针对变量传参,例如:

  1. 针对变量CMAKE_TOOLCHAIN_FILE 传参:
    -DCMAKE_TOOLCHAIN_FILE=…/config.cmake
  2. 针对变量CMAKE_BUILD_TYPE传参:
    -DCMAKE_BUILD_TYPE=“Debug”

读取配置文件.cmake

一些公共的Cmake配置,不需要在cmake工程中再次配置,可以通过不同的cmake工程进行导入,该文件的后缀为.cmake,读取配置文件可通过传参导入,也可以通过CmakeLists关键字加载导入

通过cmake命令传参导入

cmake -G "$CMAKE_TYPE" ../ -DCMAKE_TOOLCHAIN_FILE=../config.cmake

通过关键字导入

include(${PROJECT_SOURCE_DIR}/common_config.cmake)

设置工程:project

当前版本的描述中对project的设置参数为

project(<PROJECT-NAME> [<language-name>...])
project(<PROJECT-NAME>
        [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
        [DESCRIPTION <project-description-string>]
        [HOMEPAGE_URL <url-string>]
        [LANGUAGES <language-name>...])

LANGUAGES为指定语言,如果工程有多种语言混搭可以不设置该值

简单版直接就设置个工程名

set(MAIN_NAME CmakeTest)
project(${MAIN_NAME})

详细版即可添加对应的描述

set(MAIN_NAME CmakeTest)
project(${MAIN_NAME}
    VERSION 1.2.3.4
    DESCRIPTION "CmekTest"
    HOMEPAGE_URL "https://cmake.org/cmake/help/v3.15/command/project.html")

打印工程变量

message("PROJECT_NAME ${PROJECT_NAME}")
message("PROJECT_VERSION ${PROJECT_VERSION}")
message("PROJECT_DESCRIPTION ${PROJECT_DESCRIPTION}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值