Cmake使用基础知识一之基础语法

一.cmake中预定义的变量

PROJECT_SOURCE_DIR   工程的根目录
PROJECT_BINARY_DIR   运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/build
CMAKE_INCLUDE_PATH   环境变量
CMAKE_LIBRARY_PATH   环境变量
CMAKE_CURRENT_SOURCE_DIR      当前处理的CMakeLists.txt所在的路径
CMAKE_CURRENT_BINARY_DIR      target编译目录
CMAKE_CURRENT_LIST_FILE       输出调用这个变量的CMakeList.txt的完整路径
CMAKE_CURRENT_LIST_LINE       输出这个变量所在的行
CMAKE_MODULE_PATH             定义自己的cmake模块所在的路径
EXECUTABLE_OUTPUT_PATH        重新定义目标二进制可执行文件的存放位置
LIBRARY_OUTPUT_PATH           重新定义目标链接库文件的存放位置
PROJECT_NAME                  返回通过PROJECT指令定义的项目名称

二.系统信息

1.
CMAKE_MAJOR_VERSION
CMAKE_MINOR_VERSION
CMAKE_PATCH_VERSION
2.
CMAKE_SYSTEM           系统名称,如linux-2.6.22
CMAKE_SYSTEM_NAME      不包含版本的系统名,如linux
CMAKE_SYSTEM_VERSION   如:2.6.22
CMAKE_SYSTEM_PROCESSOR 处理器名称,如i686

三.开关选项
BUILD_SHARED_LIBS 控制默认的库编译方式,如果存在且为true,这将导致所有库都构建为共享库,除非将该库显式添加为静态库。 通常将此变量作为OPTION添加到项目中,以便项目的每个用户可以决定是否要使用共享库或静态库来构建项目。

CMAKE_C_FLAGS        设置C编译选项
CMAKE_CXX_FLAGS      设置C++编译选项

四.基本语法规则
1.cmake变量使用${}方式取值,但是在IF控制语句中是直接使用变量名
2.指令(参数1 参数2)
参数使用括弧,参数之间使用空格或分号分开
3.指令是大小写无关,参数和变量是大小写相关的。

五.部分常用命令列表

1.PROJECT
  指定工程名称
2.SET
  定义变量
3.MESSAGE
  向终端输出用户定义的信息或变量的值
  STATUS
  WARNING
  AUTHOR_WARNING
  FATAL_ERROR 错误,终止所有处理过程
  SEND_ERROR  错误,继续执行,但是会跳过生成的步骤
4.ADD_EXECUTABLE
  生成可执行文件
5.ADD_LIBRARY
  生成动态库或静态库
6.SET_TARGET_PROPERTIES
设置输出的名称,设置动态库的版本和API版本
7.CMAKE_MINIMUM_REQUIRED
  声明CMake的版本要求
8.ADD_SUBDIRECTORY
  向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制的存放位置。
  ADD_SUBDIRECTORY(src_dir  [binary_dir]  [EXCLUDE_FROM_ALL])
  EXCLUDE_FROM_ALL表示将这个目录从编译过程中排除。
9.INCLUDE_DIRECTORIES
  向工程添加多个特定的头文件搜索路径
10.LINK_DIRECTORIES
   添加非标准的共享库搜索路径
11.TARGET_LINK_LIBRARIES
   为target添加需要连接的共享库
12.ADD_DEFINITIONS
  向C/C++编译器添加-D定义
13.ADD_DEPENDENCIES
  定义target依赖的其他target,确保target在构建之前,其依赖的target已经构建完毕。
14.AUX_SOURCE_DIRECTORY
   AUX_SOURCE_DIRECTORY(dir VAR)
   发现一个目录下所有的源代码文件并将列表存储在一个变量中
15.INCLUDE
  INCLUDE(file [OPTIONAL])用来载入CMakeLists.txt
16.FIND_
  FIND_FILE(<VAR> name path1 path2 ...)
  VAR变量代表找到的文件全路径,包含文件名
  FIND_LIBRARY(<VAR> name path1 path2 ...)
  VAR变量代表找到的库全路径,包含库文件名
  
17.IF
  IF(expression)
  IF(not exp)
  IF(var1 AND var2)
  IF(var1 OR var2)
  IF(COMMAND cmd)
  IF(EXISTS dir)
  IF(file1 IS_NEWER_THAN file2)
  IF(DEFINED var)
  IF(var MATCHES regex)
  
18.数字比较表达式
IF(variable LESS number)
IF(string LESS number)
IF(variable GREATER number)
IF(string GREATER number)
IF(variable EQUAL number)
IF(string EQUAL number)

19.按照字母表顺序进行比较
IF(variable STRLESS number)
IF(string STRLESS number)
IF(variable STRGREATER number)
IF(string STRGREATER number)
IF(variable STREQUAL number)
IF(string STREQUAL number)

20.WHILE
  WHILE(condition)
COMMAND(ARGS ...)
COMMAND(ARGS ...)
  ENDWHILE(condition)

21.FOREACH
  FOREACH(loop_var arg1 arg2 ...)
COMMAND(ARGS ...)
COMMAND(ARGS ...)
  ENDFOREACH(loop_var)

22.LIST用法
  list(LENGTH <list><output variable>)
  list(GET <list> <elementindex> [<element index> ...]<output variable>)
  list(APPEND <list><element> [<element> ...])
  list(FIND <list> <value><output variable>)
  list(INSERT <list><element_index> <element> [<element> ...])
  list(REMOVE_ITEM <list> <value>[<value> ...])
  list(REMOVE_AT <list><index> [<index> ...])
  list(REMOVE_DUPLICATES <list>)
  list(REVERSE <list>)
  list(SORT <list>)

LENGTH            返回list的长度
GET              返回list中index的element到value中
APPEND            添加新element到list中
FIND             返回list中element的index,没有找到返回-1
INSERT           将新element插入到list中index的位置
REMOVE_ITEM        从list中删除某个element
REMOVE_AT         从list中删除指定index的element
REMOVE_DUPLICATES      从list中删除重复的element
REVERSE           将list的内容反转
SORT            将list按字母顺序排序

六.常见问题

1.cmake中如何生成动态库和静态库
ADD_LIBRARY和SET_TARGET_PROPERTIES
2.cmake中如何使用动态库和静态库
INCLUDE_DIRECTORIES, LINK_DIRECTORIES, TARGET_LINK_LIBRARIES
3.cmake中如何指定生成文件的输出路径
使用SET命令重新定义ECECUTABLE_OUTPUT_PATH和LIBRARY_OUTPUT_PATH变量来指定最终的二进制文件的位置。
4.cmake中如何增加编译选项
CMAKE_C_FLAGS
CMAKE_CXX_FLAGS
使用ADD_DEFINITION添加
5.cmake中如何增加头文件路径
INCLUDE_DIRECTORIES
6.cmake中如何给变量赋值
SET
AUX_SOURCE_DIRECTORY
7.指定安装路径
CMake变量``CMAKE_INSTALL_PREFIX’'用于确定文件的安装位置。如果使用cmake --install自定义安装目录可以通过–prefix参数指定。对于多配置工具,请使用–config参数指定
组态。
8.需要cmake生成makefile的工程文件有对math库的依赖,主要在cmakelist.txt添加依赖:
LINK_LIBRARIES(m) #括号中添加标准库名称,math的库用m表示
ps:需在add_executable(main ${DIR_SRCS})前添加

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值