CMake中set_target_properties/get_target_property的使用

news2025/1/12 6:11:56

      CMake中的set_target_properties命令用于为targets设置属性(targets can have properties that affect how they are built),其格式如下:

set_target_properties(target1 target2 ...
                      PROPERTIES prop1 value1
                      prop2 value2 ...)

      该命令的语法是列出要更改的所有targets,然后提供接下来要设置的值。你可以使用任何所需的prop值对,然后使用get_property或 get_target_property命令将其提取。

      CMake中的get_target_property命令用于从target获取属性,其格式如下:

get_target_property(<VAR> target property)

      属性的值存储在变量<VAR>中。如果没有找到target属性,则行为取决于是否已将其定义为INHERITED属性。非继承(inherited)的属性将设置<VAR>为<VAR>-NOTFOUND,而继承的属性将搜索相关的父作用域(parent scope),如define_property所述,如果仍然无法找到属性,<VAR>将被设置为空字符串。
      使用set_target_properties来设置target属性值。属性通常用于控制如何构建target,但有些属性用于查询target。该命令可以获取到目前为止创建的任何target的属性targets不需要在当前CMakeLists.txt文件中

include_directories(include)
add_library(add STATIC source/add.cpp)
add_library(subtraction SHARED source/subtraction.cpp)
add_library(multipy OBJECT source/multipy.cpp)

set_target_properties(add subtraction multipy PROPERTIES _ADD_ static _SUBTRACTION_ shared _MULTIPY_ object)

get_target_property(var add _ADD_)
message("var: ${var}") # var: static
get_target_property(var subtraction _SUBTRACTION_)
message("var: ${var}") # var: shared
get_target_property(var multipy _MULTIPY_)
message("var: ${var}") # var: object

get_target_property(var add XXXX)
message("var: ${var}") # var: var-NOTFOUND

      执行测试代码需要多个文件

      build.sh内容如下:

#! /bin/bash

# supported input parameters(cmake commands)
params=(function macro cmake_parse_arguments \
		find_library find_path find_file find_program find_package \
		cmake_policy cmake_minimum_required project include \
		string list set foreach message option if while return \
		math file configure_file \
		include_directories add_executable add_library target_link_libraries install \
		target_sources add_custom_command add_custom_target \
		add_subdirectory aux_source_directory \
		set_property set_target_properties define_property)

usage()
{
	echo "Error: $0 needs to have an input parameter"

	echo "supported input parameters:"
	for param in ${params[@]}; do
		echo "  $0 ${param}"
	done

	exit -1
}

if [ $# != 1 ]; then
	usage
fi

flag=0
for param in ${params[@]}; do
	if [ $1 == ${param} ]; then
		flag=1
		break
	fi
done

if [ ${flag} == 0 ]; then
	echo "Error: parameter \"$1\" is not supported"
	usage
	exit -1
fi

if [[ ! -d "build" ]]; then
	mkdir build
	cd build
else
	cd build
fi

echo "==== test $1 ===="

# test_set.cmake: cmake -DTEST_CMAKE_FEATURE=$1 --log-level=verbose ..
# test_option.cmake: cmake -DTEST_CMAKE_FEATURE=$1 -DBUILD_PYTORCH=ON ..
cmake -DTEST_CMAKE_FEATURE=$1 ..
# It can be executed directly on the terminal, no need to execute build.sh, for example: cmake -P test_set.cmake
make
# make install # only used in cmake files with install command

      CMakeLists.txt内容如下:

cmake_minimum_required(VERSION 3.22)
project(cmake_feature_usage)

message("#### current cmake version: ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}")
include(test_${TEST_CMAKE_FEATURE}.cmake)
message("==== test finish ====")

      test_set_target_properties.cmake内容为上面的所有测试代码段

      另外还包括三个目录:include,source,samples,它们都是非常简单的实现,仅用于测试,如下:

      可能的执行结果如下图所示:

 

      GitHub: https://github.com/fengbingchun/Linux_Code_Test

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/76271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅析安科瑞无线测温装置在香港科技大学配电系统中的设计应用

摘要&#xff1a; 随着变电站自动化技术的推广和应用&#xff0c;无人值班的变电站越来越多&#xff0c;变电站的高压开关柜采用全密封结构&#xff0c;在长期运行过程中&#xff0c;开关的触点和母线连接等部位因老化或接触电阻过大而发热&#xff0c;由于这些发热部位的温度…

四种基于MQ的分布式事务解决方案

在微服务的时代&#xff0c;分布式事务是绕不开的话题&#xff0c;尽管在大多数场景下&#xff0c;我们并不需要使用分布式事务&#xff0c;但是 不需要使用 不代表 可以不会使用&#xff0c;万一哪天真需要用到了呢&#xff1f;分布式事务是一个比较大的话题&#xff0c;今天我…

1426827-79-3,endo-BCN-NHS ester,endo-BCN-NHS 活性酯

endo-BCN-NHS ester试剂反应原理&#xff1a; BCN基团与叠氮化物标记的生物分子反应&#xff0c;NHS酯可用于标记蛋白质的伯胺&#xff08;-NH2&#xff09;、胺修饰的寡核苷酸和其他含胺分子&#xff0c;西安凯新生物科技有限公司下面为大家整理分享。​endo-BCN-NHS ester物理…

Python学习基础笔记三十二——正则表达式

官方定义&#xff1a;正则表达式是对字符串操作的一种逻辑公式&#xff0c;就是用事先定义好的一些特殊字符、及这些特定字符的组合&#xff0c;组成一个“规则字符串”&#xff0c;这个规则字符串用来表达对字符串的一种过滤逻辑。 1、在Linux运维中&#xff0c;vi、grep、awk…

fiddler使用的作用与常见应用场景

Fiddler工具的工作原理 1.本地应用与服务器之间所有的Request 和Response都将经过Fiddler&#xff0c;由Fiddler进行转发&#xff0c;此时Fiddler以代理服务器的方式存在。 2.由于所有的网络数据都会经过Fiddler&#xff0c;因此Fiddler能够截获这些数据&#xff0c;实现网络…

美团四面 Java 岗,终获 offer,我是这么回答面试官的

前言 经历了 10 月的疫情挣扎与 11 月失业的煎熬&#xff0c;终于来到了春末的 12 月&#xff0c;内心的压力也稍稍的松懈了一些&#xff0c;终于可以放心找个工作了&#xff0c;可是随着的等待面试的机会的越来越少&#xff0c;这份焦虑反而越来越大&#xff0c;也偶尔会想&a…

稳定性建设之JavaScript代码不能被阻断

稳定性建设之JavaScript代码不能被阻断 背景 js代码可能会因为某些原因&#xff0c;导致出错&#xff0c;进而整个后续代码有可能都被阻断。直接影响线上的稳定性 最常见的js被阻断的情况 console.log(111) // 预期 a {} // 结果 a undefined a.a 1 console.log(222) // …

Pycharm的简单介绍以及api的使用

一、什么是Pycharm&#xff1f; Pycharm是一种python IDE&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、脚本控制。此外&#xff0c;该IDE提供了一些高级功…

MyBatis-Plus中自动填充功能的用法

系列文章目录 Mybatis-PlusSpringBoot结合运用_心态还需努力呀的博客-CSDN博客MyBaits-Plus中TableField和TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus之ActiveRecord[基础增删改查操作]_心态还需努力呀的博客-CSDN博客 MyBatis-Plus分页查询&#xff08;快速上…

【JavaWeb开发-Servlet】day06-学生成绩管理系统-实现分页功能

目录 一、前端设计 二、分页功能 ①创建实体层 ②在DAO层新建两个方法 ③编写业务层 ④实现Servlet层 ⑤修改前端页面 ⑥测试 ⑦思路 ⑧扩展 一、前端设计 原来的前端非常简陋&#xff0c;没有明显的突出其功能&#xff0c;下面将对前端页面进行新的完善。 写一个标题…

HPPH-DSPE-PEG/NH2/MAL光克洛-磷脂-聚乙二醇/光克洛-聚乙二醇-氨基/马来酰亚胺

小编今天和大家一起来学习HPPH-DSPE-PEG/NH2/MAL光克洛-磷脂-聚乙二醇/光克洛-聚乙二醇-氨基/马来酰亚胺相关研究内容! 光克洛&#xff0c;第二代的光敏剂&#xff0c;可用于光动力疗法 (PDT)&#xff0c;基本结构为二氢卟吩类化合物。美国研究人员从绿色植物中提取、纯化&…

nginx笔记

作者&#xff1a;ThinkStu 文章目录一、简介二、常用配置1、listen2、server_name3、location4、sendfile5、nodelay/push6、add_header7、set 变量8、if9、return10、keepalive三、常用操作1、Gzip压缩2、正则表达式3、rewrite重写4、rewrite范例5、跨域6、防盗链7、适配移动设…

R语言数据可视化分析案例:探索BRFSS数据

最近我们被客户要求撰写关于BRFSS数据的研究报告&#xff0c;包括一些图形和统计输出。 加载包 library(tidyr) library(knitr) opts_chunk$set(echo TRUE, fig.align "center") 载入资料 load("brfss2013.RData")第1部分&#xff1a;数据 描述如何收…

Spring Boot ActuatorAdmin

Spring Boot Actuator&Admin 指标监控简介 干嘛的&#xff1a; 主要运用在微服务架构&#xff0c;所以我建议你先学微服务&#xff0c;否则可能get不到它的用处&#xff0c;只有大型的分布式系统才会用到指标监控… Why&#xff1a;&#xff1f; 对于一个大型的几十个、…

低代码如何自定义主题?一文教会你

SuccAP低代码开发平台&#xff0c;除了提供了多主题供选择外&#xff0c;还支持自定义报表主题&#xff0c;当系统自带的主题无法满足项目需求时&#xff0c;可以根据项目设计并新增主题&#xff0c;本文将介绍如何去新增自定义主题。 新增自定义主题可按如下步骤操作&#xf…

APS高级计划排程在乳制品行业的应用

目前乳制品行业供应链管理中存在的主要问题 生产盲目性&#xff0c;应对市场变化能力不足。现如今牛奶已经成为人们日常饮食需求的必需品&#xff0c;很多生产厂家就开始大量的生产&#xff0c;全然不顾市场的需求度&#xff0c;应对市场变化的能力不足&#xff0c;导致了有一…

计算机毕业设计ssm+vue基本微信小程序的心理服务平台 uniapp 小程序

项目介绍 随着计算机技术的发展,带来社会各行业的进步,信息化逐渐运用到人们的生活中。传统模式的青少年心理健康管理满足不了现代人的生活追求,服务质量、服务速度,之前的很多网站由于功能、或者框架设计等原因,无法完美的展现它的特色,优势,浪费了很多资源。使用管理系统进行…

今天步行数5000多

今天步行数量比较多的&#xff0c;有五千多步吧&#xff0c;希望明天能继续保持下去。

企业知识分享系统的设计与实现

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

两种方案解决vscode浏览器跨域问题

一、 问题 1.1 在接收 json 数据的时候出现了以下错误&#xff1b; 打开测试用的 json 文件发现数据并没有问题&#xff0c;而第一个报错可以看到 Cross origin requests are only supported for protocol schemes&#xff1a;… &#xff0c;也就是说所使用的数据不在跨域的许…