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

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

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

26600

CMake 秘籍(六)

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

16200
您找到你想要的搜索结果了吗?
是的
没有找到

CMake库打包以及支持find_package

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

28200

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

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

99300

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

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

2.3K31

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中评估时,安装前缀为;否则,为空。...重要提示:* 如果你需要内部预编译头文件但仍然希望安装导出目标,那么第四章,《使用目标》中描述$生成器表达式将防止头文件出现在使用要求中。

24100

CMake简易指南

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

65250

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 工程

52910

人工智能—产生式推理

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

93920

CMake 秘籍(五)

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

40420

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.4K20

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

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

20800

【系列教程】 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项目

2.9K30

面向 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

6800

Android Studio 3.2新功能特性

如果您有任何未迁移到AndroidX名称空间Maven依赖关系,Android Studio生成系统也会自动转换这些项目依赖关系。...导出CPU跟踪 在使用CPU分析器记录CPU活动之后,可以将数据导出为.trace文件以便与其他人共享或稍后检查。 在记录CPU活动后导出轨迹,请执行以下操作: 右键单击要从CPU时间轴导出录像。...这些新检查范围从关于潜在可用性问题警告到关于潜在安全漏洞高优先级错误。 新Gradle目标 使用新lintFixGradle任务将lint检查建议所有安全修复直接应用于源代码。...您可以通过在项目gradle.properties文件中包含以下内容来开始使用R8预览版本: android.enableR8 = true 修改了默认abi 当建立多个APK每个目标不同ABI...Studio现在包含改进编辑器功能,同时编辑您CMake构建脚本,例如: 语法突出显示和代码完成: IDE现在突出显示并建议通用CMake命令代码完成。

5.4K10
领券