cmkae命令set_target_properties

2023-05-16

一、介绍

命令的格式如下

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

Sets properties on targets. The syntax for the command is to list all the targets you want to change, and then provide the values you want to set next. You can use any prop value pair you want and extract it later with the get_property() or get_target_property() command.

意思就是:

这个命令是设置目标的属性,该命令的语法是列出想要更改的所有目标,然后提供接下来想要设置的值。您可以使用该命令任何所需的键值对,然后使用get_property()或get_target_property()命令提取它。

二、使用

有如下例子

1、建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc

向终端输出Hello World字符串。

2、安装头文件与共享库。

3、编写一个程序,来使用创建的共享库(静态库和动态库)。

首先,新建一个目录,创建MakeList.txt

/home/code/test/build

PROJECT(HELLOLIB)

# 通过在主工程文件CMakeLists.txt中修改ADD_SUBDIRECTORY (lib) 指令来指定一个编译输出位置;

# 指定本工程中静态库libhello.so生成的位置,即 build/lib;

ADD_SUBDIRECTORY(lib)

在lib目录下建立两个源文件hello.cpp与 hello.h

hello.cpp内容如下:

#include "hello.h"

using namespace std;

void HelloFunc(){

    cout << "Hello World/n";

}

hello.h内容如下:

#ifndef HELLO_H

#define HELLO_H

#include <stdio.h>

void HelloFunc();

#endif

在lib目录下建立CMakeLists.txt,内容如下: 

SET (LIBHELLO_SRC hello.cpp)

# SET (LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

# 添加动态库,关键词为shared,不需要写全称libhello.so,

# 只需要填写hello即可,cmake系统会自动为你生成 libhello.X


ADD_LIBRARY (hello SHARED ${LIBHELLO_SRC})


# 添加静态库,关键词为static,ADD_LIBRARY (hello STATIC ${LIBHELLO_SRC})

# 仍然用hello作为target名时,是不能成功创建所需的静态库的,

# 因为hello作为一个target是不能重名的, 故把上面的hello修改为hello_static

# 同理,你不需要写全libhello_static.a

# 只需要填写hello即可,cmake系统会自动为你生成 libhello_static.X


ADD_LIBRARY (hello_static STATIC ${LIBHELLO_SRC})


# 按照一般的习惯,静态库名字跟动态库名字应该是一致的,只是扩展名不同;

# 即:静态库名为 libhello.a; 动态库名为libhello.so ;

# 所以,希望 "hello_static" 在输出时,不是"hello_static",而是以"hello"的名字显示,故设置如下:


SET_TARGET_PROPERTIES (hello_static PROPERTIES OUTPUT_NAME "hello")


GET_TARGET_PROPERTY (OUTPUT_VALUE hello_static OUTPUT_NAME)


MESSAGE (STATUS "This is the hello_static OUTPUT_NAME: " ${OUTPUT_VALUE})


# cmake在构建一个新的target时,会尝试清理掉其他使用这个名字的库,

# 因此,在构建libhello.a时,就会清理掉libhello.so.

# 为了回避这个问题,比如再次使用SET_TARGET_PROPERTIES定义 CLEAN_DIRECT_OUTPUT属性。


SET_TARGET_PROPERTIES (hello_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)

SET_TARGET_PROPERTIES (hello PROPERTIES CLEAN_DIRECT_OUTPUT 1)


# 按照规则,动态库是应该包含一个版本号的,

# VERSION指代动态库版本,SOVERSION指代API版本。

SET_TARGET_PROPERTIES (hello PROPERTIES VERSION 1.2 SOVERSION 1)

 
# 我们需要将libhello.a, libhello.so.x以及hello.h安装到系统目录,才能真正让其他人开发使用,

# 在本例中我们将hello的共享库安装到<prefix>/lib目录;

# 将hello.h安装<prefix>/include/hello目录。

INSTALL (TARGETS hello hello_static LIBRARY DESTINATION lib

ARCHIVE DESTINATION lib)

INSTALL (FILES hello.h DESTINATION include/hello)

在build目录中

cmake ..

make

这时,你就可以在lib目录得到一个libhello.so,这就是我们期望的共享库。

如果你要指定libhello.so生成的位置,可以通过:

  • 在主工程文件CMakeLists.txt中修改ADD_SUBDIRECTORY (lib) 指令来指定一个编译输出位置;
  • 或者在 lib/CMakeLists.txt中添加SET (LIBRARY_OUTPUT_PATH <路径>) 来指定一个新的位置。

参考:

set_target_properties — CMake 3.22.0 Documentation
add_subdirectory — CMake 3.22.0 Documentation

(转)HelloWorld CMake CMake中构建静态库与动态库及其使用 - 莫水千流 - 博客园

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cmkae命令set_target_properties 的相关文章

  • 托管对象中的标量类型仅适用于 iPhone 5

    属性 Latitude 是 LatitudeLongitude 类的标量类型 无法为其生成 setter 方法 当我为托管对象生成代码时 我收到一条消息 询问是否需要原始数据类型的标量属性 我应该使用它吗 我想让这个应用程序与 iPhone
  • 获取 3 个列表之间的差异

    我正在研究列表的差异 gt gt a 1 2 3 gt gt b 2 4 5 gt gt c 3 2 6 两组之间的对称差异可以使用以下方法完成 gt gt z set a symmetric difference set b gt gt
  • 如何在 C++ 中前向声明 std::set?

    为了加快编译过程 我正在尝试简化我的头文件MyClass hpp通过前向声明 STL 容器 例如 std vector std set But std set can NOT在以下代码中进行前向声明 同时std vector can be
  • 在 pandas 系列上成对应用函数

    我有一个 pandas 系列 其元素构成 freezesets data 0 frozenset apple banana 1 frozenset apple orange 2 frozenset banana 3 frozenset ku
  • 条件“可浏览”属性

    有没有办法使 可浏览 属性成为有条件的 以便应用它的属性有时会出现在属性页中 有时不会出现 谢谢 我不确定这是否适用于您的情况 但您可以通过调用下面的函数在运行时调整 可浏览 装饰
  • 在 MS-Access 中以编程方式隐藏列

    我想根据用户选择的变量数据隐藏或显示列 如何在 MS Access 2003 中将列设置为隐藏 例如 用户更改事件后 For Each ctl In Me FormNameHere Form Controls If TypeName ctl
  • Typescript 将“接口”键作为字符串的并集传播

    是否可以将函数参数类型检查为其中之一interface s keys export interface IUser id string email string password string const updateUserPropert
  • set()是如何实现的?

    我见过有人这么说setpython 中的对象具有 O 1 成员资格检查 他们如何在内部实施以实现这一点 它使用什么类型的数据结构 该实施还有哪些其他影响 这里的每个答案都非常有启发性 但我只能接受一个 所以我将选择最接近我原来问题的答案 谢
  • android 将自定义字体设置为油漆

    我想在油漆上绘制文字 如何用自定义字体绘制它 前 Helvetica 并且还粗体 我更愿意使用系统字体而不是从资源创建它 谢谢 如果 自定义字体 是指作为资源提供的字体 则以下代码应该有效 Typeface plain Typeface c
  • 如何在Linux中为特定程序设置进程ID

    我想知道是否有某种方法可以在运行某些应用程序之前强制使用 Linux 的某些特定进程 ID 我需要提前知道进程ID 实际上 有一种方法可以做到这一点 自内核 3 3 设置了 CONFIG CHECKPOINT RESTORE 在大多数发行版
  • 是 F# 映射上的迭代还是集合中序遍历?

    AFAIK F Map 和 set 被实现为红黑树 所以我猜这些的迭代将是有序遍历 我做了一些测试 迭代结果总是排序的 但我想确定一下 是按顺序遍历吗 MSDN 上的文档非常适合解决这个问题 例如 返回值Set toSeq http msd
  • 为什么没有人接受 C# 中的公共字段?

    似乎每个 C 静态分析器在看到公共字段时都会抱怨 但为什么 当然 在某些情况下 公共 或内部 field就足够了 拥有一个拥有它的财产是没有意义的get and set 方法 如果我确定我不会重新定义该字段或添加该字段怎么办 副作用很糟糕
  • Kotlin:乐趣与 val

    Kotlin 支持计算属性但我不确定何时使用它们 假设我有一堂课 class Car val color String 并有这个返回的函数true如果汽车是白色的 fun isWhite car Car Boolean return car
  • 作为属性的类引用

    谷歌对于这类搜索毫无用处 因为你会得到数亿个结果 其中没有一个与特定问题相关 问题很简单 Delphi 中是否可以有类引用属性 如果是这样 怎么办 这是我尝试过的 type TMyObject class end TMyObjectClas
  • Swift 1.2 重新声明 Objective-C 方法

    我刚刚从 swift 1 1 更新到 swift 1 2 并得到编译器错误 Method setVacation redeclares Objective C method setVacation 这里有一些代码 var vacation
  • 操纵 setter 以避免 null

    通常我们有 public string code get set 如果最终有人将代码设置为 null 我需要避免空引用异常 我尝试这个想法 有什么帮助吗 public string code get set if code null cod
  • dict_values 视图什么时候可以像设置一样(以及为什么)?

    文档说值视图不被视为类似集合 https docs python org 3 library stdtypes html dictionary view objects 但有时它们是 gt gt gt d 1 1 gt gt gt d va
  • 目标操作 uicontrol 事件

    我一定在这里遗漏了一些明显的东西 但是 UIControl有一个方法 void addTarget id target action SEL action forControlEvents UIControlEvents controlEv
  • 在 Spring Boot application.properties 中指定信任存储信息

    我在用springBoot版本1 2 0 RELEASE 我正在尝试通过配置我的密钥库和信任库application properties 当我添加以下设置时 我可以使密钥库正常工作 但不能使信任库正常工作 server ssl key s
  • 何时使用属性而不是函数

    这可能是个人喜好的问题 但是什么时候在代码中使用属性而不是函数 例如 要获取错误日志 我可以说 string GetErrorLog return m ErrorLog 或者我可以 string ErrorLog get return m

随机推荐

  • 【STM32H750】玩转ART-Pi(一)——使用STM32CUBMX生成TouchGFX工程

    目录 STM32H750 玩转ART Pi xff08 一 xff09 使用STM32CUBMX生成TouchGFX工程 STM32H750 玩转ART Pi xff08 二 xff09 制作MDK的外部QSPI FLASH烧录算法 STM
  • 【STM32H750】玩转ART-Pi(二)——制作MDK的外部QSPI-FLASH烧录算法

    目录 STM32H750 玩转ART Pi xff08 一 xff09 使用STM32CUBMX生成TouchGFX工程 STM32H750 玩转ART Pi xff08 二 xff09 制作MDK的外部QSPI FLASH烧录算法 STM
  • linux驱动开发篇(四)—— platform平台设备驱动

    linux系列目录 xff1a linux基础篇 xff08 一 xff09 GCC和Makefile编译过程 linux基础篇 xff08 二 xff09 静态和动态链接 ARM裸机篇 xff08 一 xff09 i MX6ULL介绍 A
  • C语言变参函数和可变参数宏

    文章目录 一 变参函数的设计与实现1 变参函数初体验2 变参函数改进版3 变参函数 V3 0 版本3 变参函数 V4 0 版本4 变参函数 V5 0 版本 二 可变参数宏的设计与实现1 什么是可变参数宏2 宏连接符 的作用3 可变参数宏的另
  • 利用MDK的FLM文件生成通用flash驱动

    文章目录 前言一 FLM文件是什么 xff1f 二 FLM文件结构1 FlashPrg c2 FlashPrg c 三 解析FLM文件1 解析flm文件 四 设计flash驱动抽象层五 快速使用 前言 在进行Flash操作时 xff0c 一
  • 游标的概念和作用

    游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制 游标充当指针的作用 尽管游标能遍历结果中的所有行 xff0c 但他一次只指向一行 概括来讲 xff0c SQL的游标是一种临时的数据库对象 xff0c 即可以用来存放在数
  • 【STM32H750】从零编写MDK的FLM烧录算法

    文章目录 前言一 将代码中的图片资源下载到外部flash1 修改分散加载文件 二 MDK下载算法原理1 程序能够通过下载算法下载到芯片的原理2 算法程序中擦除操作执行流程3 制作FLM文件步骤 三 使用STM32CubeMX新建工程1 新建
  • 使用MDK开发树莓派pico RP2040之外部 flash下载算法

    文章目录 前言一 MDK下载算法原理1 程序能够通过下载算法下载到芯片的原理2 算法程序中操作执行流程3 创建MDK下载算法通用流程 二 树莓派pico下载算法制作步骤1 下载树莓派的MDK的程序模板2 修改输出算法文件的名字3 修改编程算
  • 单片机堆栈分配

    Code xff1a 表示程序所占用 FLASH 的大小 xff08 FLASH xff09 RO data xff1a 即 Read Only data xff0c 表示程序定义的常量 xff0c 如 const 类型 xff08 FLA
  • 【STM32F429】通过STM32CubeMX移植TouchGFX

    目录 STM32F429 移植TouchGFX到RT Thread系统 xff08 1 xff09 STM32F429 使用TouchGFX的MVP架构来实现GUI和硬件的双向交互 xff08 2 xff09 STM32F429 RT Th
  • TouchGFX使用MVP架构来实现GUI和硬件的双向交互

    目录 xff1a 实战 xff1a 1 STM32F767移植touchGFX 使用RT Thread系统实现DIY数字仪表 xff08 完成 xff09 2STM32F429移植touchGFX 使用RT Thread系统实现DIY数字仪
  • python 微信自动回复机器人

    python 微信自动回复机器人 导入wxauto https github com cluic wxauto span class token comment python3 span span class token comment c
  • 《python+opencv实践》一、基于颜色的物体追踪(上)

    点击打开链接 本文主要参考国外一大牛博客 xff0c 然后自己修改得来 相关知识点在这里 实现功能 xff1a 追踪红颜色瓶盖 xff0c 并画出瓶盖轮廓和运动轨迹 from collections import deque import
  • 《python+opencv实践》一、基于颜色的物体追踪(下)

    本文对 python 43 opencv实践 一 基于颜色的物体追踪 xff08 上 xff09 做了功能上的强化 xff0c 强化如下 xff1a xff08 1 xff09 加了pts清空 xff0c 即当没有检测到目标时 xff0c
  • Ubuntu16.04 编译出错c++: internal compiler error: Killed (program cc1plus)

    最近在使用github上的一个模拟器 xff0c 需要自己对其中文件进行make编译 但是中间遇到了不知道多少个错误 xff0c 吐血 想了想还是记录一下 xff0c 错误 compiling moc moc qwt plot panner
  • C++创建信号量 CreateSemaphore

    一 定义 Semaphore也是一个线程同步的辅助类 xff0c 可以维护当前访问自身的线程个数 xff0c 并提供了同步机制 使用Semaphore可以控制同时访问资源的线程个数 xff0c 例如 xff0c 实现一个文件允许的并发访问数
  • OpenGL ES之GLSurfaceView学习一:介绍

    原文地址 http 120 132 134 205 cmdn supesite uid 5358 action viewspace itemid 6527 GLSurfaceView是一个视图 xff0c 继承至SurfaceView xf
  • C++之STL迭代器

    一 背景 迭代器 iterator 是一种抽象的设计理念 xff0c 即迭代器模式 xff0c 通过迭代器可以在不了解容器内部原理的情况下遍历容器 除此之外 xff0c STL中迭代器一个最重要的作用就是作为容器 vector queue
  • C++make_shared的使用

    一 使用 make shared是标准库函数 xff0c 此函数在动态内存中分配一个对象并初始化它 xff0c 返回指向此对象的shared ptr 由于是通过shared ptr管理内存 xff0c 因此这是一种安全分配和使用动态内存的方
  • cmkae命令set_target_properties

    一 介绍 命令的格式如下 set target properties target1 target2 PROPERTIES prop1 value1 prop2 value2 Sets properties on targets The s