首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CMake错误:安装导出包含的目标要求的目标不在任何导出集中

这个错误通常在使用CMake构建项目时出现。它表示在安装导出时,所包含的目标需要存在于至少一个导出集中,但找不到目标所在的导出集。

要解决这个错误,首先需要理解CMake的导出集概念和相关概念。

CMake中的导出集(export set)是指一组目标,这些目标将在安装时导出到指定目录,以供其他项目或模块使用。导出集是通过install(TARGETS ... EXPORT ...)命令进行定义和配置的。

当遇到上述错误时,我们可以通过以下步骤来解决问题:

  1. 检查CMakeLists.txt文件:检查CMakeLists.txt文件,确认是否正确配置了install(TARGETS ... EXPORT ...)命令。确保目标在导出集中被正确声明。
  2. 确认目标是否存在于导出集中:检查CMakeLists.txt文件,查找导出集的声明并确认目标是否正确添加到了相应的导出集中。可以通过类似下面的代码片段来添加目标到导出集:
代码语言:txt
复制
set_target_properties(target_name PROPERTIES
    EXPORT export_name
)
  1. 确认导出集是否在安装导出时被正确使用:检查CMakeLists.txt文件,确认install(EXPORT ...)命令是否正确使用了之前定义的导出集。例如:
代码语言:txt
复制
install(EXPORT export_name
    DESTINATION ${CMAKE_INSTALL_PREFIX}/path/to/export
)
  1. 检查目标是否被正确定义:确保目标被正确定义并且可以在构建过程中正常生成。可以使用add_executable()add_library()命令来定义目标。
  2. 进一步调试:如果上述步骤都没有解决问题,可以尝试使用CMake的一些调试工具来进一步分析和定位错误。例如,可以使用message()命令输出一些调试信息,或者使用CMake的--trace-source参数来输出详细的调试信息。

以上是针对CMake错误:"安装导出包含的目标要求的目标不在任何导出集中"的解决方案。关于CMake和相关概念的更详细信息,您可以参考腾讯云的CMake产品介绍链接:https://cloud.tencent.com/document/product/624

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

面向 C++ 现代 CMake 教程(四)

在本章中,我们将介绍如何导出目标,以便另一个项目可以在不安装情况下使用它们,以及如何安装我们项目,以便它们可以很容易地被系统上任何程序使用。...现在我们目标已经是“安装兼容”,我们可以安全地生成并安装它们导出文件。 安装目标导出文件 我们在无需安装导出部分稍微讨论了目标导出文件。...不要被这个困惑 - 目标导出文件不是一个配置文件,所以您现在还不能使用find_package()来消耗已安装目标。然而,如果需要,您可以直接包含导出文件。...它被视为一个包定义,负责提供任何包函数和宏,检查要求,查找依赖项,并包含目标导出文件。...它将包含列表文件中提供$LIB_INSTALL_DIR路径,但它将相对于安装路径进行计算。然后,我们使用它来包含目标导出文件。

45700

CMake 秘籍(六)

然而,始终将 RPATH 硬编码指向构建树或安装前缀也同样错误:这两个位置中任何一个都可能被删除,导致可执行文件损坏。...该文件将包含我们导出目标。我们还添加了一个测试,以检查项目的安装导出是否按预期工作。 如何操作 再次,根CMakeLists.txt文件与前一个食谱相比未更改。...,其中包含了所有我们要求 CMake 自动生成文件。...我们准备了一个名为IntelMKLINTERFACE库。这可以像任何其他目标一样使用,并将为任何依赖目标设置包含目录、编译器选项和链接库。...CMake INTERFACE库是构建系统中目标,但不直接创建任何构建输出。然而,由于它们是目标,我们可以在它们上面设置属性。就像“真实”目标一样,它们也可以被安装导出和导入。

27300

CMake库打包以及支持find_package

本文对CMake中库打包,安装导出以及支持find_package,使其能够很简单应用到其他项目中进行详细总结。...CMake导出库经过上述步骤,我们已经安装了我们库所有东西,现在其他用户可以通过include_directories和add_libraries以及制定链接目标等相应操作来使用我们库,但是我们希望能够像...为此,CMake提供了目标导出功能。导出一个目标能够让我们重复利用一个CMake工程,比如一些变量等等,就像用户自己定义一样,最常见就是OpenCV和NDK这类工程。...为了使用导出功能,需要创建一个my_library.cmake文件,其中包含了所有编译和安装目标的引用,用户只需要包含这个文件就可以使用前面编译和安装库。...[minor]/${CMAKE_BUILD_TYPE}/中,这条命令也将目标加入导出集合中。

36500

万字总结编译利器CMake,从入门到项目实战演练

使用要求可以更好地控制库或可执行文件链接和include行,同时还可以更好地控制CMake内部目标的传递属性。...利用使用要求主要命令是: 目标编译定义 目标编译选项 目标包含目录 目标链接库 让我们从第2步中重构代码,以利用现代CMake方法编写使用要求。...EXPORT关键字生成并安装一个CMake文件,该文件包含用于从安装树中导入install命令中列出所有目标的代码。...这是通过将以下内容添加到顶级CMakeLists.txt底部来完成安装导出 MathFunctionsTargets 文件 MathFunctionsTargets.cmake 目标...如果一切设置正确,您将看到CMake将生成如下错误目标“MathFunctions”INTERFACE_INCLUDE_DIRECTORIES 属性包含 路径: “/Users/robert/

1.1K00

从零开始编写一个cmake构建脚本

简介本文档介绍cmake构建脚本编写,包含一些主要元素和命名规范。...cmake构建脚本编写步骤cmake构建工具版本要明确# 命令名字要小写,这条语句要求构建工具至少需要版本为3.12或以上cmake_minimum_required (VERSION 3.12)工程名及库版本号明确在编写工程名以及版本号时有几点需要注意...BUILD_SAMPLE "Build tests" OFF) # 变量名BUILD_SAMPLE 变量说明"Build tests" 状态 OFF:表示不打开 ON:表示打开配置打印调试信息对于一些可能出现错误或者警告...库对外提供被find_package能力install后,所有导出头文件、动态库、静态库、可执行二进制、cmake文件都可以安装到指定路径下install(TARGETS ${TARGET_NAME...} #TARGETS 安装目标文件,可以是可执行文件、动态库、静态库 EXPORT ${TARGET_NAME} #需要对外导出文件,该选项用于生成xxxConfig.cmake

9420

Android对so体积优化探索与实践

背景 应用安装体积影响着用户下载时长、安装时长、磁盘占用空间等诸多方面,因此减小安装体积对于提升用户体验和下载转化率都大有益处。...编译:将预处理后文件编译成汇编代码。 汇编:将汇编代码汇编成目标文件,目标文件中包含机器指令(大部分情况下是机器指令,见下文 LTO 一节)和数据以及其他必要信息。...简要介绍一下目标文件,目标文件(扩展名 .o )也是 ELF 文件,所以也是由 section 组成,只不过它只包含了相应源文件内容:函数会放到 .text 样式 section 中,一些可读写变量会放到...有两种方式可以把 C++ 函数添加到导出符号中:第一种是查看未优化 so 导出符号表,找到目标函数被修饰后符号,然后填写到 version_script.txt 中。...方案收益 优化 so 对安装包体积和安装后占用本地存储空间有直接收益,收益大小取决于原 so 冗余代码数量和导出符号数量等具体情况,下面是部分 so 优化前后占用安装包体积对比: 下面是上述 so

2.5K31

xmake v2.3.7 发布, 新增 tinyc 和 emscripten 工具链支持

,能够让用户把更多精力集中在实际项目开发上。...xmake f --toolchain=[tinyc|emscripten] xmake 我们还在新版本中,额外提供了两个安装包,内置集成了 TinyC 编译环境,整个安装包只需要 5M,还包含了 winsdk...如果你们用过 autotools/cmake 去交叉编译生成 mingw/android/ios 目标程序,cmake 和 autotools 还能够简单一致处理么?...递归导出安装包 xmake 之前提供了一个命令,可以导出通过 xmake 安装所有第三方依赖包。...xmake require --export 但是,之前版本对应一些存在依赖包,导出时候只会导出自身,它所有依赖是不会被导出,而这个版本中,我们对其进行了改进,将对应所有依赖包也进行了导出

1.3K10

面向 C++ 现代 CMake 教程(二)

有时,这样使用目标必须满足一些特定要求:链接一些库,包含一个目录,或者需要特定编译特性。所有这些都是要求,所以在某种意义上文档是正确。问题是,在文档其他任何上下文中,它们都不被称为要求。...,并且你不能安装导出别名(它们在生成构建系统中不可见)。...接下来,使用生成表达式(在本章最后部分解释),我们将其包含目录设置为当目标导出时为${CMAKE_CURRENT_SOURCE_DIR}/src,安装时为include/Eigen(这将在本章最后解释)...$ – 当目标用install(EXPORT)导出时或在INSTALL_NAME_DIR中评估时,安装前缀为;否则,为空。...重要提示:* 如果你需要内部预编译头文件但仍然希望安装导出目标,那么第四章,《使用目标》中描述$生成器表达式将防止头文件出现在使用要求中。

37200

CMake简易指南

IDE 兼容,实际使用时尽可能使用更新版本 cmake 可以避免一些不必要错误。...运行大致分两到三步,下述样例属于cmake 控制台命令:配置:输入源文件目录,指定目标编译系统,添加编译选项,生成目标编译系统编译:输入目标编译系统,执行编译安装(可选):将编译产物安装到指定位置(...--target install步骤二编译时也可以使用目标编译系统编译命令触发编译,需要编写跨平台编译脚本时,使用cmake --build .可以适配任何环境配置配置阶段参数主要为以下几种:-G...所以遇到一些非预期错误时,请先删除缓存路径下CMakeCache.txt文件。...# 指定最低cmake版本要求cmake_minimum_required(VERSION 3.14)# 创建项目标识project(mylib)# 添加名为mylib目标,类型为动态库add_library

76950

xmake v2.6.4 发布,大量包管理特性改进

Xmake 是一个基于 Lua 轻量级跨平台构建工具。 它非常轻量,没有任何依赖,因为它内置了 Lua 运行时。...它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多精力集中在实际项目开发上。...:导出符号例子 通过指定符号导出,我们可以使得生成动态库尽可能小,无关内部符号完全不去导出它们,另外这个规则支持 linux, macOS 和 windows,更加通用。...xrepo env 环境配置 #2117: 支持为任意平台传递工具链到包 #2121: 支持导出指定符号列表,可用于减少动态库大小 改进 #2036: 改进 xrepo 支持从配置文件批量安装包,...例如:xrepo install xxx.lua #2039: 改进 vs generator filter 目录展示 #2025: 支持为 phony 和 headeronly 目标生成 vs 工程

55010

人工智能—产生式推理

包含了将问题从初始状态转换成目标状态所需要所有变换规则,所以规则库是产生式系统进行问题求解基础。 ...要求采用正向推理,求满足以上事实动物是何种动物。  把“动物有羽毛,动物善飞”放入综合数据库检查综合数据库中是否包含问题解,结果为否。...(从结论推条件是否满足初始条件)  算法过程  将问题初始证据和要求目标(假设)分别放入综合数据库和假设集。从假设集中选出一个假设,检查该假设是否在综合数据库中。若在,则该假设成立。...若假设不在综合数据库中,则执行下一步。检查该假设是否可由知识库某个知识导出。若不能由某个知识导出,则询问用户该假设是否为可有用户正是的原始事实。...此时假设集中假设已全部被综合数据库中已知事实所满足。  优点  不必寻找和使用那些与假设目标无关信息和知识,推理过程目标明确,也有利于向用户提供解释。

97720

CMake 秘籍(五)

} 我们配置外部项目,使其始终处于构建状态: BUILD_ALWAYS 1 安装步骤不会执行任何操作(我们将在第 4 个配方中重新讨论安装,即“编写安装程序”中安装超级构建”): INSTALL_COMMAND...我们示例将 INSTALL_COMMAND 留空,我们将在 第十章,编写安装程序中更详细地讨论使用 CMake 进行安装。 测试选项:对于从源代码构建任何软件,运行测试总是一个好主意。...这样文件将库作为目标导出,供第三方项目使用。目标包含版本、配置和库位置,即有关目标如何配置和构建完整信息。...我们仅列出了 C、C++和 Fortran 语言一些可能有效文件扩展名,但 CMake 可以识别更多。如果项目中文件扩展名由于任何原因不在识别的扩展名之列,该怎么办?...使用INTERFACE属性,库将仅被链接到以当前目标作为依赖目标。 使用PUBLIC属性,库将被链接到当前目标以及任何以它作为依赖其他目标

60520

cmake基础示例:如何编译【跨平台】动态库和应用程序

,两个函数 my_add 和 my_sub 符号才可能被导出到 mylib.lib 文件中。...打开 VSCode,然后打开测试代码文件夹 cmake_demo: 因为需要使用cmake工具来构建,所以需要在VSCode安装 cmake 插件。...(如何安装 VSCode 插件就不赘述了) 第一步: cmake 配置 按下键盘 ctrl + shift + p,在命令窗口中选择 Cmake: Configure,如果没看到这个选项,就手动输入前面的几个字符...按下 shift + F7,或者单击VSCode底部 Build 图标: 弹出编译目标列表: 这里选择 ALL_BUILD,也就是编译所有的目标:mylib 和 myapp,输出如下: 来看一下编译输出文件...myapp.exe 是编译得到可执行程序。 第三步: 执行 我们先在命令行窗口中执行一下myapp.exe: 提示错误:找不到动态链接库!

2.8K20

面向 C++ 现代 CMake 教程(三)

对象文件包含以下元素: 一个 ELF 头,用于标识目标操作系统、ELF 文件类型、目标指令集架构以及 ELF 文件中找到两个头表位置和大小信息——程序头表(不在对象文件中)和段头表。...,所以它正确地从nested目标导出。...如今,许多项目都符合这一要求,在安装过程中提供了这个文件给 CMake。如果你计划使用某个流行库而它没有提供此文件,暂时不必担心。...这个行为与之前例子不同,在那里我们明确定义了yaml-cpp目标。如果库不提供安装阶段(或者二进制版本名字不匹配),链接器将抛出错误。...REQUIRED关键字指示 CMake 在找不到它们时抛出错误。接下来,我们按照以下步骤添加一个自定义coverage目标: 清除之前运行任何计数器。

33800

【系列教程】 C++项目开发配置最佳实践(vscode远程开发配置、格式化、代码检查、cmake管理配置)

而vscode远程开发,是把开发者自己机器上 VSCode 原样拷贝到作为目标机器(Remote Host)上,以服务形式运行,而本地 VSCode 作为客户端,两者之间通过远程通讯协议彼此协调合作...-git-clang-format由于clang-format安装位置不在系统PATH变量中,所以这个时候在命令行还找不到clang-format命令。..."--", clang-tidy会从目录下查找compliation database,这个database就是compile_commands.json文件,里面包含该项目中所有的编译单元编译命令。...在使用之前要导出这个文件。目前已经有工具帮我们做了这项工作。...如果是cmake项目,通过cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON path/to/llvm/sources命令导出;cmake版本需要大于3.5如果是GYP项目

3.1K30

面向 C++ 现代 CMake 教程(五)

遗憾是,我们在这里不能添加覆盖率文件清理,因为 CMake 要求 add_custom_command 钩子必须在目标定义相同目录中调用。...--error-exitcode=10 – 这指定了当cppcheck检测到问题时,我们希望得到一个错误代码。这可以是从1到255任何数字(0表示成功),尽管有些数字可能被系统保留。...我们关注安装两个项目: 计算库工件:静态库、共享库以及与之相关头文件和目标导出文件 计算控制台可执行文件 包定义配置文件将只引入库目标,因为潜在消费项目不会依赖于可执行文件。...我们需要生成并安装目标导出文件和包括它配置文件: chapter-12/01-full-project/cmake/Install.cmake(继续) install(EXPORT CalcLibrary...CHANGELOG – 列出不同版本中发生重要变化 AUTHORS – 如果项目有多个贡献者,则包含信用和联系信息 BUGS – 告知已知错误,并指导如何报告新错误 至于 CMake

10100
领券