CMake语法—函数(简单参数)
目录
CMake语法—函数(简单参数)
1 CMake函数简单参数示例
1.1 CMakeLists.txt
cmake_minimum_required(VERSION 3.18) # 设置工程名称 set(PROJECT_NAME KAIZEN) # 设置工程版本号 set(PROJECT_VERSION "1.0.0.10" CACHE STRING "默认版本号") # 工程定义 project(${PROJECT_NAME} LANGUAGES CXX C VERSION ${PROJECT_VERSION} ) # 打印开始日志 message(STATUS "##########BEGIN_TEST") # 定义函数 function(test_argument age) # 打印ARGN参数值 message(STATUS "ARGN: ${ARGN}") # 打印ARGC参数值 message(STATUS "ARGC: ${ARGC}") # 打印ARGV参数值 message(STATUS "ARGV: ${ARGV}") # 打印ARGV0参数值 message(STATUS "ARGV0: ${ARGV0}") # 打印参数个数 list(LENGTH ARGV argv_len) message(STATUS "length of ARGV: ${argv_len}") # 遍历打印各参数值 set(i 0) while(i LESS ${argv_len}) list(GET ARGV ${i} argv_value) message(STATUS "argv${i}:${argv_value}") math(EXPR i "${i} + 1") endwhile() endfunction() # 调用函数形式1 ## test_argument() error!因为此函数必须至少有一个参数 # 调用行数形式2 test_argument(20) # 调用函数形式3 test_argument(18 "kaizen" "beijing" "baidu" 60) # 打印结束日志 message(STATUS "##########END_TEST")
1.2 执行CMake配置(cmake_config.bat)脚本
@echo off set currentDir=%~dp0 set buildDir=%currentDir% set cmakeOutputDir=%currentDir%\build cmake -S %buildDir% -B %cmakeOutputDir% -G"Visual Studio 16 2019" -T v140 -A x64 pause
1.3 目录结构
- learn_cmake:为根目录
- build:为CMake配置输出目录(在此例中即生成sln解决方案的地方)
- cmake_config.bat:执行CMake配置过程的脚本(双击直接运行)
- CMakeLists.txt:CMake脚本
2 运行结果
2.1 环境说明
本地安装VS版本:Visual Studio 2019(2015工具集)
CMake版本:3.18.2
F:\learn_cmake λ cmake --version cmake version 3.18.2 CMake suite maintained and supported by Kitware (kitware.com/cmake).
2.2 运行结果
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.17763. -- The CXX compiler identification is MSVC 19.0.24245.0 -- The C compiler identification is MSVC 19.0.24245.0 -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/cl.exe - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/cl.exe - skipped -- Detecting C compile features -- Detecting C compile features - done -- ##########BEGIN_TEST -- ARGN: -- ARGC: 1 -- ARGV: 20 -- ARGV0: 20 -- length of ARGV: 1 -- argv0:20 -- ARGN: kaizen;beijing;baidu;60 -- ARGC: 5 -- ARGV: 18;kaizen;beijing;baidu;60 -- ARGV0: 18 -- length of ARGV: 5 -- argv0:18 -- argv1:kaizen -- argv2:beijing -- argv3:baidu -- argv4:60 -- ##########END_TEST -- Configuring done -- Generating done -- Build files have been written to: F:/learn_cmake/build 请按任意键继续. . .
2.3 结论
2.3.1 函数定义时有几个形参,调用时至少必需有相同个数的实参
从示例程序43行分析可得:函数test_argument定义时,有一个年龄参数age,但是43行调用时,未输入任何实参,调用错误CMake Error。
2.3.2 ARGN:代表除过必需实参而外其它多余实参
从示例程序输出日志15、21行可以分析而得:
代码46行第一种调用形式,只有一个实参20,其对应的形参为age,即函数必需的一个参数。
所以,ARGN结果为空,意即除过必需实参而外没有其他多余实参。
而代码49行第二种调用形式,总共有5个实参,第一个实参18,其对应的形参为age,即函数必需的一个参数。
所以,ARGN结果为“kaizen;beijing;baidu;60”,意即除过必须实参而外合计还有4个多余实参。
2.3.3 ARGC:代表所有实参的个数
从示例程序输出结果16、22行可以分析而得。
2.3.4 ARGV:代表所有实参的值(注意:用分号拼接在一起)
从示例程序输出结果17、23行可以分析而得。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
2013-11-22 COM编程之五 动静态链接