Cmake入门之——Set方法(六)

一 概述

set方法是cmake-commands中的脚本方法,用于给下面的变量设置值:

  • 一般变量(Set Normal Variable)
  • 缓存变量(Set Cache Entry)
  • 环境变量(Set Environment Variable)

二 Set方法说明

2.1 一般变量(Set Normal Variable)

复制

1
set(<variable> <value>... [PARENT_SCOPE])
  • variable:只能有一个
  • value:可以有0个,1个或多个,当value值为空时,方法同unset,用于取消设置的值
  • PARENT_SCOPE(父作用域):作用域,除PARENT_SCOPE外还有function scope(方法作用域)和directory scope(目录作用域)

2.2 缓存变量(Set Cache Entry)

复制

1
set(<variable> <value>... CACHE <type> <docstring> [FORCE])
  • variable:只能有一个
  • value:可以有0个,1个或多个,当value值为空时,方法同unset,用于取消设置的值
  • CACHE:关键字,说明是缓存变量设置
  • type(类型):必须为以下中的一种:
    • BOOL:有ON/OFF,两种取值
    • FILEPATH:文件的全路径
    • PATH:目录路径
    • STRING:字符串
    • INTERNAL:字符串
  • docstring:总结性文字(字符串)
  • [FORCE]:变量名相同,第二次调用set方法时,第一次的value将会被覆盖

2.3 环境变量(Set Environment Variable)

复制

1
set(ENV{<variable>} [<value>])
  • variable:只能有一个
  • value:一般来说,只有一个,为空时,将清除之前设置的变量值,多个时,取值最近的一个,之后的值将被忽略

三 示例

3.1 一般变量(Set Normal Variable)

  • CMakeLists.txt中设置

    复制
    1
    2
    3
    4
    5
    
    #normal
    set(normal "normalValue")
    message(WARNING ${normal})
    set(a 1 b 2 "c" [PARENT_SCOPE])
    message(WARNING ${a})
    
  • Debug输出结果

    复制
    1
    2
    3
    4
    5
    
    CMake Warning at CMakeLists.txt:10 (message):
      normalValue
    
    CMake Warning at CMakeLists.txt:12 (message):
      1b2c[PARENT_SCOPE]
    

3.2 缓存变量(Set Cache Entry)

  • CMakeLists.txt中设置

    复制
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    # cache
    set(isOn ON CACHE BOOL "Bool" [FORCE])
    message(WARNING ${isOn})
    set(isOFF OFF CACHE BOOL "Bool" )
    message(WARNING ${isOFF})
    
    ## cache-FILEPATH
    set(filePath ${PROJECT_SOURCE_DIR}/CMakeLists.txt CACHE FILEPATH "file path")
    message(WARNING ${filePath})
    set(filePath ${PROJECT_SOURCE_DIR}/main.cpp CACHE FILEPATH "file path" [FORCE])
    message(WARNING ${filePath})
    
    ## cache-PATH
    set(path ${PROJECT_SOURCE_DIR} CACHE PATH "path")
    message(WARNING ${path})
    set(path ${PROJECT_BINARY_DIR} CACHE PATH "path" [FORCE])
    message(WARNING ${path})
    
    ## cache-STRING
    set(string cmake CACHE STRING "string")
    message(WARNING ${string})
    set(string newcmake CACHE STRING "newstring" [FORCE])
    message(WARNING ${string})
    
    ##cache-internal
    set(internal internal CACHE INTERNAL "internal")
    message(WARNING ${internal})
    set(internal newinternal CACHE INTERNAL "newinternal" [FORCE])
    message(WARNING ${internal})
    
  • Debug输出结果

    复制
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    CMake Warning at CMakeLists.txt:12 (message):
      ONCACHEBOOLBool[FORCE]
    
    CMake Warning at CMakeLists.txt:14 (message):
      OFF
    
    CMake Warning at CMakeLists.txt:18 (message):
      E:/Code/ClionDemo/CmakeSet/CMakeLists.txt
    
    CMake Warning at CMakeLists.txt:20 (message):
      E:/Code/ClionDemo/CmakeSet/main.cppCACHEFILEPATHfile path[FORCE]
    
    CMake Warning at CMakeLists.txt:24 (message):
      E:/Code/ClionDemo/CmakeSet
    
    CMake Warning at CMakeLists.txt:26 (message):
      E:/Code/ClionDemo/CmakeSet/cmake-build-debugCACHEPATHpath[FORCE]
    
    CMake Warning at CMakeLists.txt:30 (message):
      cmake
    
    CMake Warning at CMakeLists.txt:32 (message):
      newcmakeCACHESTRINGnewstring[FORCE]
    
    CMake Warning at CMakeLists.txt:36 (message):
      internal
    
    CMake Warning at CMakeLists.txt:38 (message):
      newinternalCACHEINTERNALnewinternal[FORCE]
    

3.3 环境变量(Set Environment Variable)

  • CMakeLists.txt中设置

    复制
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    message(WARNING $ENV{JAVA_HOME}) #JAVA_HOME是windows中设置的变量
    set(ENV{JAVA_HOME} 1)
    message(WARNING $ENV{JAVA_HOME})
    
    set(ENV{DEFINE} DEFINE  DEFINE2 DEFINE3) #自定义的变量
    message(WARNING $ENV{DEFINE})
    
    set(a) #没有value值,a值清空
    message(WARNING ${a})
    
  • Debug输出结果

    复制
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    CMake Warning at CMakeLists.txt:42 (message):
      D:\SoftWare\Java\jdk1.8.0_191
    
    CMake Warning at CMakeLists.txt:44 (message):
      1
    
    CMake Warning at CMakeLists.txt:49 (message):
      DEFINE
    
    CMake Warning at CMakeLists.txt:52 (message):
    

四 参考

### 回答1: 《CMake——入门到精通》是一本介绍CMake的书籍。CMake是一个跨平台的开源构建工具,它可以用于自动化构建、测试和部署应用程序、库和模块。 这本书从CMake的基本概念和用法入手,逐步深入介绍了CMake的各种功能和高级用法。首先,书中介绍了CMake的安装和配置,以及CMake项目的基本结构。然后,书中详细讲解了如何编写CMakeLists.txt文件来描述项目的构建过程,包括如何定义源文件、头文件和链接库,如何设置编译选项和链接选项,以及如何生成不同平台和编译器下的构建配置。 在介绍完CMake的基本使用后,书中着重讲解了CMake的高级功能和技巧。比如,如何使用CMake进行跨平台开发,如何进行自定义构建规则,如何配置项目的安装和打包,以及如何对大型项目进行模块化管理等等。同时,书中还提供了大量的示例代码和实用技巧,帮助读者更好地理解和应用CMake。 总的来说,《CMake——入门到精通》是一本系统而全面的CMake教程,适合想要学习和掌握CMake的开发人员阅读。无论是初学者还是有一定经验的开发者,都可以从这本书中获取到实用的知识和经验,提高项目构建的效率和质量。无论是在学习中还是在实际工作中,这本书都可以成为CMake的权威参考指南。 ### 回答2: 《cmake——入门到精通.pdf》是一本关于CMake的书籍。CMake是一个跨平台的开源构建工具,用于管理软件项目的构建过程。本书旨在帮助读者从入门到精通掌握CMake的使用。 这本书首先介绍了CMake的基本概念和原理,包括如何编写CMakeLists.txt文件以及如何配置和生成项目的构建系统。然后,书中详细介绍了CMake的常用功能和命令,包括设置编译选项、指定源文件、添加库和链接库等。此外,本书还深入讲解了CMake的高级用法,如多目录项目管理、条件编译、自定义函数和宏等。 除了基本功能和用法,本书还涵盖了CMake与其他工具和框架的集成,如与Qt、OpenGL和Boost等。读者可以学习如何使用CMake来管理复杂项目和库的构建过程。 《cmake——入门到精通.pdf》也提供了大量的示例和实战项目,帮助读者更好地理解和应用CMake。通过阅读本书,读者将能够全面了解CMake的工作原理和常用技巧,掌握使用CMake构建和管理项目的能力。 总之,借助《cmake——入门到精通.pdf》,读者可以系统地学习和掌握CMake的基本概念和高级用法,并能够灵活应用CMake来管理复杂项目的构建过程。这本书对于软件开发者和项目管理者来说,是一本非常实用和有价值的参考书。 ### 回答3: 《CMake入门到精通.pdf》是一本介绍CMake工具的书籍。CMake是一个跨平台的开源构建工具,可以用于管理和自动化C++项目的构建过程。该书以系统的方式介绍了CMake的基本概念、语法和用法。 首先,书中详细解释了CMake的背景和作用。CMake的主要功能是生成与平台无关的构建脚本,在不同的操作系统和编译器上都可以使用。它可以通过简单的配置文件来管理项目的依赖关系和编译选项。 其次,书中介绍了CMake的基本语法和常用命令。CMake使用一种类似于脚本的语言来描述项目的构建过程,通过编写CMakeLists.txt文件来配置项目。书中示例详细展示了如何编写CMakeLists.txt文件,包括设置项目名称、指定源文件、添加库和链接库等等。 然后,书中深入讲解了CMake的高级用法和技巧。CMake提供了丰富的功能来处理复杂的项目结构和构建需求,例如条件判断、循环、宏定义等。书中通过实际案例演示了这些高级特性的使用方法,帮助读者更好地理解和运用CMake。 最后,书中还介绍了CMake与其他开发工具的集成,如CTest、CPack和CDash等。CTest用于自动化测试,CPack用于生成安装包,CDash用于持续集成。书中展示了如何使用这些工具来进一步提高项目的开发效率和质量。 总之,《CMake入门到精通.pdf》通过全面而系统的方式介绍了CMake工具的使用方法,适合初学者和有一定经验的开发者阅读。读者可以通过学习这本书,掌握CMake的基本概念和语法,了解CMake在实际项目中的应用,提高项目的构建效率和可维护性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值