首页 > 其他分享 >6. cmake(property)

6. cmake(property)

时间:2024-07-27 09:27:50浏览次数:19  
标签:PROPERTY cmake test set var property 属性

目录

1. 文件目录

 2. 基本语法

2.1 全局属性

2.2 目录属性

2.3 文件属性

 2.4 目标属性

 2.5 CMakePrintHelpers 打印属性

3. 代码段


1. 文件目录

 其中sub_global和sub_directory下的cmakelists.txt以及main.cpp为我们需要的测试文件,其内容分别如下:

main.cpp

#include <iostream>
using namespace std;

int main()
{
#ifdef PARA1
	cout << "测试通过设置文件属性COMPILE_DEFINITIONS给C++传递值" << endl;
	cout << "PARA1 = " << PARA1 << endl;
#endif

#ifdef PARA2
	cout << "测试通过设置目标属性COMPILE_DEFINITIONS给C++传递值" << endl;
	cout << "PARA2 = " << PARA2 << endl;
#endif

#ifdef PARA3
	cout << "测试通过设置目标追加属性给C++传递值" << endl;
	cout << "PARA3 = " << PARA3 << endl;
#endif

	return 0;
}

 sub_global/CMakeLists.txt

cmake_minimum_required(VERSION 3.20)
project(sub_global)

#测试:父目录可以拿到子目录中定义的全局属性
set_property(GLOBAL PROPERTY sub_global_property "sub global property")

 sub_directory/CMakeLists.txt

cmake_minimum_required(VERSION 3.20)
project(sub_directory)

#测试:父目录可以拿到子目录中定义的文件夹属性
set_property(DIRECTORY . PROPERTY sub_directory_property "sub directory property")

 2. 基本语法

属性分为4种,全局属性,文件属性,目录属性,目标属性

2.1 全局属性

全局属性的作用域也是全局,和cache不同的是,property不会缓存

set_property(GLOBAL PROPERTY test_global "test global value")
get_property(var GLOBAL PROPERTY test_global) #取出全局属性test_global存入var变量
message("var = ${var}")

 

 父目录可以拿到子目录中定义的全局属性

#父目录可以拿到子目录中定义的全局属性
add_subdirectory(sub_global)
get_property(var GLOBAL PROPERTY sub_global_property)
message("in main sub_global_property = ${var}")

 使用APPEND进行属性拼接,结果是属性数组

#使用APPEND进行属性拼接,结果是属性数组
set_property(GLOBAL APPEND PROPERTY append_property "append1")
set_property(GLOBAL APPEND PROPERTY append_property "append2")
get_property(var GLOBAL PROPERTY append_property)
message("var = ${var}") #可以使用foreach IN LISTS 遍历

 

APPEND_STRING拼接是单纯的字符串拼接,其结果不是属性数组

#APPEND_STRING拼接是单纯的字符串拼接,其结果不是属性数组
set_property(GLOBAL APPEND_STRING PROPERTY append_string_property "append string 1")
set_property(GLOBAL APPEND_STRING PROPERTY append_string_property "append string 2")
get_property(var GLOBAL PROPERTY append_string_property)
message("var = ${var}")

 

 SET: 看属性是否被赋值,无论其值是否为空

#SET: 看属性是否被赋值,无论其值是否为空
set_property(GLOBAL PROPERTY test_set "test set")
get_property(var GLOBAL PROPERTY test_set SET)
message("var = ${var}")
if(var)
	message("test_set is set!")
else()
	message("test_set is not set!")
endif()

 

DEFINED:看属性是否定义,无论是否有值。只有在调用define_property之后才为1

#DEFINED:看属性是否定义,无论是否有值。只有在调用define_property之后才为1
define_property(GLOBAL PROPERTY test_defined BRIEF_DOCS "brief" FULL_DOCS "full")
get_property(var GLOBAL PROPERTY test_defined DEFINED)
if(var)
	message("test_defined is defined!")
else()
	message("test_defined is not defined!")
endif()
#获取概要说明
get_property(var GLOBAL PROPERTY test_defined BRIEF_DOCS)
message("brief docs = ${var}")

 

2.2 目录属性

set_property(DIRECTORY . PROPERTY dir_property "dir property")
get_property(var DIRECTORY . PROPERTY dir_property)
message("var = ${var}")

父目录可以拿到子目录中定义的目录属性

#父目录可以拿到子目录中定义的文件夹属性
add_subdirectory(sub_directory)
get_property(var DIRECTORY sub_directory PROPERTY sub_directory_property)
message("var = ${var}")

2.3 文件属性

set_property(SOURCE ./main.cpp PROPERTY test_source "test source")
get_property(var SOURCE ./main.cpp PROPERTY test_source)
message("var = ${var}")

生成可执行文件测试,通过文件属性给C++传递变量

#生成可执行文件测试
#通过文件属性给C++传递变量
#预置属性 COMPILE_DEFINITIONS
set_property(SOURCE ./main.cpp PROPERTY COMPILE_DEFINITIONS "PARA1=\"test source\"") #注意=两边不能写空格
add_executable(${PROJECT_NAME} ./main.cpp)

 2.4 目标属性

set_property(TARGET ${PROJECT_NAME} PROPERTY test_target "test_target")
get_property(var TARGET ${PROJECT_NAME} PROPERTY test_target)
message("var = ${var}")

通过目标属性给C++传递变量,可追加设置

#通过目标属性给C++传递变量
set_property(TARGET ${PROJECT_NAME} PROPERTY COMPILE_DEFINITIONS "PARA2=\"test target\"")

#追加设置
set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY COMPILE_DEFINITIONS "PARA3=\"test append target\"")

 2.5 CMakePrintHelpers 打印属性

#打印属性CMakePrintHelpers
include(CMakePrintHelpers)
cmake_print_properties(TARGETS ${PROJECT_NAME} PROPERTIES test_target)
cmake_print_properties(DIRECTORIES . PROPERTIES dir_property)

3. 代码段

https://github.com/kdvictor/CSDN/tree/main/cmake/6.property

标签:PROPERTY,cmake,test,set,var,property,属性
From: https://blog.csdn.net/2301_80967396/article/details/140725707

相关文章

  • system.getproperty值从哪里来的
    system.getproperty值从哪里来的在Java中,System.getProperty(Stringkey)方法用于获取系统属性的值。这些系统属性来源于多个地方,但主要可以分为以下几类:JVM启动参数:当JVM启动时,可以通过-D参数来设置系统属性。例如,java-DmyProperty=myValueMyApp会在MyApp中设置一个名为my......
  • Spring | createBeanInstance传入的有参和 applyPropertyValues中的属性有什么关系
    基本功能createBeanInstanceBean的实例化会根据构造函数参数创建Bean的实例。构造函数参数通常是通过依赖注入提供的,这些依赖可能是其他bean或者简单的值类型applyPropertyValuesBean的属性设置在Bean实例创建后,负责将剩余的属性值注入到Bean实例中。这些属性值可能来自......
  • CMake 生成 Visual Studio 项目管理工程文件 sln
    前言全局说明CMake生成VisualStudio项目管理工程文件sln一、说明环境:Windows7旗舰版二、生成sln项目工程文件2.1UI界面版生成方式https://blog.csdn.net/analogous_love/article/details/1349075402.2命令行生成方式2.2.1看看都支持生成哪些版本2.2.......
  • Windows下cmake入门教程-利用cmake创建Visual Studio工程
    希望我们不仅把编程当成一份工作,更要将其当成一份热爱!!!                                                                 -----潜意......
  • CMake 生成 Visual Studio 项目管理工程文件 sln
    前言全局说明CMake生成VisualStudio项目管理工程文件sln一、说明环境:Windows7旗舰版二、生成sln项目工程文件2.1UI界面版生成方式https://blog.csdn.net/analogous_love/article/details/1349075402.2命令行生成方式2.2.1看看都支持生成哪些版本2.2.......
  • cmake Windows安装
    前言全局说明cmake安装一、说明环境:Windows7x64旗舰版二、官网&下载CMake是一个开源的、跨平台的工具家族,旨在构建、测试和打包软件。CMake用于使用简单的平台和编译器独立的配置文件来控制软件编译过程,并生成可以在您选择的编译器环境中使用的本机makefiles和......
  • CMake使用知识点之三——测试 用例
    知识点积累1内部宏${PROJ_SOURCE_DIR}:2单元测试代码cmake_minimum_required(VERSION3.10)project(ExampleProject)#启用测试enable_testing()#添加可执行文件main(如果有主程序的话)add_executable(mainmain.cpp)#添加测试可执行文件test1和test2add_e......
  • CMake使用方法(详细版)上
    目录CMake是什么如何配置使用方法基本流程使用cmake的示例只有源文件搜索文件set的使用头文件和源文件分离包含头文件变量操作生成动态库和静态库制作静态库制作动态库链接库文件日志参考CMake是什么         CMake是一个跨平台的项目构建工具,它......
  • SpringBoot升级到3.3.2版本,JDK升级到17,引入Mybatis-plus后启动报错:Property 'sqlSessi
    【问题描述】2024-07-23T15:16:07.174+08:00WARN2604---[questionnaire][main]ConfigServletWebServerApplicationContext:Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.UnsatisfiedDependen......
  • Qt 实战(7)元对象系统 | 7.5、QMetaProperty详解
    文章目录一、QMetaProperty详解1、QMetaProperty的作用2、使用QMetaProperty2.1、声明属性2.2、访问属性3、QMetaProperty成员方法4、示例4.1、通过名称获取指定属性4.2、遍历全部属性(包含从基类继承下来的)4.3、遍历当前类的全部属性(不包含从基类继承下来的)5、动态属性......