编写或者查看一些开源cmake文件中经常遇到在宏(macro)和函数中经常会遇到ARGC ARGV 和ARGN等参数,该参数为cmake中专用变量,分别表示宏或者函数参数中的特殊意义。

ARGC

ARGC代表的是函数或者宏传递的参数个数。查看cmake官方文档原文表述:

Number of command line arguments passed to CMake in script mode.

When run in -P script mode, CMake sets this variable to the number of command line arguments. See also CMAKE_ARGV0, 1, 2 …

ARGV

ARGV代表所有传递的参数,使用list表示,其中如果函数有多个参数,要取得某个参数可以使用ARGV0,ARGV1,ARGV2等。

Command line argument passed to CMake in script mode.

When run in -P script mode, CMake sets this variable to the first command line argument. It then also sets CMAKE_ARGV1, CMAKE_ARGV2, … and so on, up to the number of command line arguments given. See also CMAKE_ARGC.

ARGN

包含传入参数的list, 与ARGV不同的是并不是代表所有参数,而是指宏或者函数声明的参数之后的所有参数。

可以看下cmake官方问题说明:

This facilitates creating functions with optional arguments. Additionally ARGV holds the list of all arguments given to the function and ARGN holds the list of arguments past the last expected argument.

用例

可以使用简单用例来说明:

cmake_minimum_required(VERSION 3.4.3)macro(arg_test para1 para2)MESSAGE(STATUS ARGC=${ARGC})MESSAGE(STATUS ARGV=${ARGV})MESSAGE(STATUS ARGN=${ARGN})MESSAGE(STATUS ARGV0=${ARGV0})MESSAGE(STATUS ARGV1=${ARGV1})MESSAGE(STATUS ARGV2=${ARGV2})
endmacro()arg_test(para_1, para_2,para_3,para_4)

运行结果:

-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- ARGC=2
-- ARGV=para_1,para_2,para_3,para_4
-- ARGN=
-- ARGV0=para_1,
-- ARGV1=para_2,para_3,para_4
-- ARGV2=
-- Configuring done
-- Generating done
-- Build files have been written to: /home/hzk/test/cmake

CMake中的ARGC ARGV 和ARGN参数意义相关推荐

  1. 关于C++中的argc,argv的使用方法

    想必很多人都好奇C++中的int argc 和 char **argv .那我们今天来看看argc,argv的使用方法 1,int argc argc 实际上指命令行接受的参数个数, 比如说,这个程序 ...

  2. linux c之main(int argc, char *argv[], char *envp[])参数意义

    1.问题 我们常见的int main(int argc, char *argv[], char *envp[]) 各个参数的意义 2.代码 #include<stdio.h> #inclu ...

  3. python中argv的使用_python中使用sys.argv命令行参数

    sys模块包含了与Python解释器和它的环境有关的函数. 在python命令行环境下可以通过help('sys')或是点击打开链接可以查看sys模块所有的描述说明. sys.argv变量是一个字符串 ...

  4. Main函数中的argc和argv应用举例

     尽管之前写过一篇关于argc,argv方面的文章(http://blog.csdn.net/carson2005/article/details/5766192)但依然有朋友搞不太清楚.所以,这 ...

  5. main函数的参数-argc,argv介绍

    在main函数的定义形式中,会涉及到argc,argv以及envp参数(参考上一篇:C程序main函数https://blog.csdn.net/m0_52892985/article/details ...

  6. C语言中使用库函数解析命令行参数

    在编写需要命令行参数的C程序的时候,往往我们需要先解析命令行参数,然后根据这些参数来启动我们的程序. C的库函数中提供了两个函数可以用来帮助我们解析命令行参数:getopt.getopt_long. ...

  7. 关于int main( int argc, char* argv[] ) 中arg和argv参数理解

    在示例程序中经常可以看到argc和argv这两个参数 ,在调试代码过程中遇到main函数为int main( int argc, char* argv[] ) 这种类型时往往会报错,或者是运行起来了但 ...

  8. c语言中命令行参数argc,argv[]详解

    argc 是 argument count的缩写,表示传入main函数的参数个数: argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0 ...

  9. main(int argc,char *argv[ ],char *env)参数详解

    转载自百度文库   http://wenku.baidu.com/view/22490664783e0912a2162a65.html main(int argc,char *argv[ ]) arg ...

最新文章

  1. 万字长文综述目标检测领域,你要的都在这里
  2. Linux下cp命令 -f无效的解决方法
  3. 神策数据:围绕跨境电商“人货场”,数据如何助力品牌乘风出海?
  4. Python: 使用装饰器“@”取得函数执行时间
  5. 技术和商业的碰撞,谈阿里云与天猫双11这十年
  6. 惠普HP LaserJet 1160 驱动
  7. linux如何添加虚拟打印机,Linux下虚拟打印机CUPS-PDF教程
  8. 谷歌浏览器发送POST请求(测试Post接口)
  9. 敏捷教练 V 形六步法实战:从布朗运动到深度协作
  10. Centos下如果是二进制文件,编辑是文本,后缀是sh也无法执行
  11. ChatGPT聊天app(基于autojs)
  12. AOP的理解以及实现
  13. tensorflow2.0 预测新文本(一)
  14. Oracle 常用命令总结
  15. 苹果一项“杀手锏”过审,“智能穿戴+大健康”领域风云再起
  16. 怎么把aac转化为mp3,aac转mp3的3个方法
  17. TIA portal v14怎么安装?
  18. np.repeat() 用法
  19. 【阿里云】【备案】【年度审核】
  20. 微信小程序 - 商城项目 - 个人中心

热门文章

  1. JEECG v2与v3两个版本的区别说明
  2. Adaboost原理和实例
  3. Python学习十大良好习惯
  4. hadoop--MapReduce框架原理
  5. 工厂方法模式(Factory Method Pattern)
  6. [].slice.call
  7. sed的高级命令和软件包管理器rpm
  8. 容器、Docker与Kubernetes——Kubernetes的配置入门
  9. tomcat启动报错APR问题
  10. Redis数据库-键的生存时间与过期时间的区别