关于cmake的一些使用总结

一、cmake的常用命令
基本语法规则
  • 1.cmake变量使用${}方式取值,但是在IF控制语句中是直接使用变量名。
  • 2.环境变量使用$ENV{}方式取值,使用SET(ENV{VAR} VALUE)赋值。
  • 3.指令不区分大小写,一般推荐使用大写
  •     eg:指令(参数1 参数2…)    参数使用括弧括起,参数之间使用空格或分号分开。
二、常用命令列表:
           1.PROJECT
              PROJECT(projectname [CXX] [C] [Java])
              指定工程名称,并可指定工程支持的语言。支持语言列表可忽略,默认支持所有语言
  •  2.SET
        SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
        定义变量(可以定义多个VALUE,如SET(SRC_LIST main.c util.c reactor.c))
  •  3.MESSAGE
        MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] “message to display” …)
        向终端输出用户定义的信息或变量的值,SEND_ERROR:产生错误,生成过程被跳过;STATUS:输出前缀为—的信息;FATAL_ERROR:立即终止所有cmake过程
  •   4.ADD_EXECUTABLE
         ADD_EXECUTABLE(bin_file_name ${SRC_LIST})
         生成可执行文件
  •   5.ADD_LIBRARY
         ADD_LIBRARY(libname [SHARED | STATIC | MODULE] [EXCLUDE_FROM_ALL] SRC_LIST)
         生成动态库或静态库  , SHARED 动态库;STATIC 静态库;MODULE 在使用dyld的系统有效,若不支持dyld,等同于SHARED;EXCLUDE_FROM_ALL 表示该库不会被默认构建
  •    6.SET_TARGET_PROPERTIES
          设置输出的名称,设置动态库的版本和API版本
  •    7.CMAKE_MINIMUM_REQUIRED
          CMAKE_MINIMUM_REQUIRED(VERSION version_number [FATAL_ERROR])
    声明CMake的版本要求
    •    8.ADD_SUBDIRECTORY
           ADD_SUBDIRECTORY(src_dir [binary_dir] [EXCLUDE_FROM_ALL])
           向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制的存放位置
         9.EXCLUDE_FROM_ALL含义:将这个目录从编译过程中排除
    •   10. INCLUDE_DIRECTORIES
  •      INCLUDE_DIRECTORIES([AFTER | BEFORE] [SYSTEM] dir1 dir2 … )
向工程添加多个特定的头文件搜索路径,路径之间用空格分隔,如果路径包含空格,可以使用双引号将它括起来,默认的行为为追加到当前头文件搜索路径的后面。有如下两种方式可以控制搜索路径添加的位置:
(1) CMAKE_INCLUDE_DIRECTORIES_BEFORE,通过SET这个cmake变量为on,可以将添加的头文件搜索路径放在已有路径的前面
(2) 通过AFTER或BEFORE参数,也可以控制是追加还是置前
  •     11.LINK_DIRECTORIES
             LINK_DIRECTORIES(dir1 dir2 …)
            添加非标准的共享库搜索路径
  •    12.TARGET_LINK_LIBRARIES
            TARGET_LINK_LIBRARIES(target lib1 lib2 …)
            为target添加需要链接的共享库
  •    13.ADD_DEFINITIONS
           向C/C++编译器添加-D定义
           ADD_DEFINITIONS(-DENABLE_DEBUG -DABC),参数之间用空格分隔
  •    14.ADD_DEPENDENCIES
           ADD_DEPENDENCIES(target-name depend-target1 depend-target2 …)
           定义target依赖的其他target,确保target在构建之前,其依赖的target已经构建完毕
  •    15.AUX_SOURCE_DIRECTORY
            AUX_SOURCE_DIRECTORY(dir VAR)
           发现一个目录下所有的源代码文件并将列表存储在一个变量中,把当前目录下的所有源码文件名赋给变量DIR_HELLO_SRCS
  •    16.EXEC_PROGRAM
            EXEC_PROGRAM(Executable [dir where to run] [ARGS <args>][OUTPUT_VARIABLE <var>] [RETURN_VALUE <value>])
           用于在指定目录运行某个程序(默认为当前CMakeLists.txt所在目录),通过ARGS添加参数,通过OUTPUT_VARIABLE和RETURN_VALUE获取输出和返回值        17.
    INCLUDE

  •      INCLUDE(file [OPTIONAL]) 用来载入CMakeLists.txt文件

  •      INCLUDE(module [OPTIONAL])用来载入预定义的cmake模块

  •      OPTIONAL参数的左右是文件不存在也不会产生错误

  •      可以载入一个文件,也可以载入预定义模块(模块会在CMAKE_MODULE_PATH指定的路径进行搜索)

  •      载入的内容将在处理到INCLUDE语句时直接执行

  • 18.FIND_

  •     FIND_FILE(<VAR> name path1 path2 …)          VAR变量代表找到的文件全路径,包含文件名

  •     FIND_LIBRARY(<VAR> name path1 path2 …)    VAR变量代表找到的库全路径,包含库文件名

  •      FIND_PATH(<VAR> name path1 path2 …)         VAR变量代表包含这个文件的路径

  •     FIND_PROGRAM(<VAR> name path1 path2 …)  VAR变量代表包含这个程序的全路径

  •     FIND_PACKAGE(<name> [major.minor] [QUIET] [NO_MODULE] [[REQUIRED | COMPONENTS] [componets …]])

  • 用来调用预定义在CMAKE_MODULE_PATH下的Find<name>.cmake模块,你也可以自己定义Find<name>模块,通过SET(CMAKE_MODULE_PATH dir)将其放入工程的某个目录供工程使用

  • 详情请参考该链接:点击打开链接点击打开链接点击打开链接点击打开链接点击打开链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值