当前位置: 首页 > news >正文

CMake笔记:Alias Target在哪些地方可以使用

1. 问题描述

以下命令为目标hello增加别名My::Name::Hello

add_executable(hello main.cpp)
add_executable( My::Name::Hello ALIAS hello)

开始在install中使用,
install( My::Name::Hello RUNTIME DESTINATION bin)

出现错误:
CMake Error at src/hello/CMakeLists.txt:8 (install):
install TARGETS given target “My::Name::Hello” which is an alias.

查看cmake文档:

Creates an Alias Target, such that can be used to refer to
in subsequent commands. The does not appear in the
generated buildsystem as a make target.

此句中的generated buildsystem是代码什么,install命令属于generated buildsystem中的吗?

2. generated buildsystem

generated buildsystem 具体指什么

generated buildsystem 指由 构建生成器(如CMake)输出的底层构建系统文件,例如:

  • Makefile(Unix环境)
  • build.ninja (Ninja构建系统)
  • Visual Studio的.vcxproj文件
    这些文件由CMake根据CMakeLists.txt 动态生成,而非用户手动编写。

当定义别名目标(add_executable( ALIAS ))时:
不会出现在生成的Makefile或build.ninja中,它仅是CMake层面的逻辑引用,用于简化脚本编写

3. install 的生成机制

install()命令在CMake配置阶段被解析
其规则会被写入生成的构建系统文件(如Makefile中的install目标)
执行make install时调用的是生成系统中的规则

CMake (元构建系统)
↓ 生成
Makefile/Ninja (具体构建系统)
↓ 执行
编译/安装操作

Alias Target停留在元构建层(CMake作用域)
Install目标下沉到具体构建层(Make/Ninja作用域)

4. 总结

generated buildsystem 指由CMake生成的底层构建文件(如Makefile),Alias Target不会写入此层,仅在CMake抽象层有效。
install命令会显式写入生成的构建系统,通过make install触发,属于构建系统的可执行目标。
两者根本区别在于:

  • Alias Target是配置期的逻辑抽象
  • Install是构建期的物理操作
http://www.xdnf.cn/news/1299043.html

相关文章:

  • python的艺术品收藏管理系统
  • [激光原理与应用-267]:理论 - 几何光学 - 胶卷相机的组成和工作原理
  • pytorch学习笔记-Loss的使用、在神经网络中加入Loss、优化器(optimizer)的使用
  • Video-R1论文解读
  • 前端框架选择之争:jQuery与Vue在现代Web开发中的真实地位-优雅草卓伊凡
  • 哈希表特性与unordered_map/unordered_set实现分析
  • 【Linux学习|黑马笔记|Day4】IP地址、主机名、网络请求、下载、端口、进程管理、主机状态监控、环境变量、文件的上传和下载、压缩和解压
  • 将 pdf 转为高清 jpg
  • OpenBMC中C++策略模式架构、原理与应用
  • 设计模式基础概念(行为模式):策略模式
  • c/c++实现 TCP Socket网络通信
  • ASCII与Unicode:编码世界的奥秘
  • 阿里云TranslateGeneral - 机器翻译SDK-自己封账单文件版本—仙盟创梦IDE
  • 机器学习实战篇--TF-IDF实战--名著红楼梦的文本数据处理
  • 亚马逊品牌权力重构:第三方卖家崛起下的竞争生态与系统性应对框架
  • 微信公众号推送文字消息与模板消息
  • 加密货币交易所开发:如何打造安全、高并发的数字资产交易平台?
  • 开源安全云盘存储:Hoodik 实现端到端数据加密,Docker快速搭建
  • 深度学习-卷积神经网络CNN-膨胀卷积、可分离卷积(空间可分离、深度可分离)、分组卷积
  • 【保姆级教程】CentOS 7 部署 FastDFS 全流程(避坑指南)
  • 具身智能Scaling Law缺失:机器人界的“摩尔定律“何时诞生?
  • CVPR 2025 | 机器人操控 | RoboGround:用“掩码”中介表示,让机器人跨场景泛化更聪明
  • 3D商品展示:技术狂欢下的普及困局
  • DataHub OPC Gateway:实现OPC UA与OPC DA无缝集成的高性能网关
  • 【代码随想录day 20】 力扣 108.将有序数组转换为二叉搜索树
  • 京东【自主售后】物流信息获取_影刀RPA源码解读
  • Docker部署美化SunPanel导航页
  • python+vue扫盲
  • anaconda创建pytorch1.10.0和pytorch2.0.0的GPU环境
  • java:创建指定容器类型(如ImmutableSet)的Collector对象