验证库在 CMake 脚本中的 target_link_libraries 之前可用

2023-12-07

我有一个大型项目,由多个构建目标组成,它们之间具有依赖关系。结构类似于这样:

Application <-- Library I <--- Library II
            <-- Library III <---|
            <-- Library IV

存在多个这样的应用程序,它们使用分布在不同库中的共享代码。

在项目中,CMake 用于确保正确的包含路径和各个库之间的链接。

使用 add_library("Library II") 设置库,随后其他项目使用 target_link_libraries("Library I" "Library II") 获取依赖项。

这在大多数情况下都有效。但是,有时找不到某些依赖项。我怀疑在某些情况下“图书馆 I”是未知的。但是,如果库未知,则 target_link_libraries() 不会引发错误。该错误仅在编译/链接时才会出现。

我想在运行 cmake 时验证是否已找到所有库。如果在那个阶段不知道某件事,我想抛出一个错误并通知开发人员。

我尝试使用 find_libraries() 但根据我的理解,这会查找某个文件。但是,在我的情况下,该文件只会在编译阶段进行编译,因此运行 cmake 时该文件不存在。


检查图书馆target,不是文件:

if(NOT TARGET library_2)
   message(SEND_ERROR "Attempt to link to non-existent library 'library_2'.")
endif()
target_link_libraries(library_1 library_2)

也可以看看那个问题关于检查目标。

请注意,此方法仅在以下情况下才有效

add_library(library_2)

出现在之前

target_link_libraries(library_1 library_2)

CMake 允许(并正确处理)相反的顺序,但我发现在库创建和链接之间要求直接顺序是一种很好的风格。

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

验证库在 CMake 脚本中的 target_link_libraries 之前可用 的相关文章

  • 通过ExternalProject_Add 使用 pybind11 进行 CMake 项目的智能方法

    我正在使用编写一个 python 模块pybind11 with CMake3 9 4 因为方便所以想下载pybind11源文件使用ExternalProject Add in my CMakeLists txt 当我跑步时cmake 它不
  • 如何使用 --build 选项查看 cmake 发出的命令

    当我运行 cmake build target INSTALL 命令时 如何查看发出的命令 似乎没有像 versbose之类的选项 cmake 帮助说 cmake build 是底层构建工具的接口 但没有说明有关发出的命令转储的任何内容 我
  • 安装 EXPORT 需要子项目中的目标

    我正在尝试编写一个 cmake 脚本来安装我正在处理的项目 其中一部分是必要的install EXPORT LIB EXPORTS where LIB EXPORTS是我在各种项目中一直使用的 EXPORT 属性install TARGET
  • cmake 找不到 Qt4

    由于4 8 0已经发布 我重新安装了Qt 现在我也想使用cmake 为了使 cmake 工作 我记得必须添加 mingw bin 文件夹 QtSDK Desktop Qt 4 7 3 到Qt4 7 3中的PATH 所以我猜测在中会有一个类似
  • 在生成器表达式中使用 cmake 选项

    我想在生成器表达式中使用 cmake 选项 为了打开某个编译标志 来自文档 https cmake org cmake help v3 10 manual cmake generator expressions 7 html我不清楚如何实现
  • 在 CMake 中,CHECK_INCLUDE_FILE_CXX 如何工作?

    以下代码不打印任何内容 CHECK INCLUDE FILE CXX glog logging h GLOG INCLUDE IF GLOG INCLUDE MESSAGE YY ENDIF GLOG INCLUDE 但我设置了以下环境变量
  • 如何判断给定目标是库还是可执行文件?

    内置功能install TARGETS 将库目标安装到可执行目标之外的其他位置 我想做类似的事情 给定目标名称列表 我想将其中的所有库目标添加到列表变量中 并将所有运行时目标添加到另一个变量中 我找不到 CMake 的默认目标属性列表 但我
  • 如何在使用 Cmake 构建期间编译 HLSL 着色器?

    我正在开发 d3d 应用程序 我想在使用 cmake 构建期间编译我的 hlsl 着色器 我不知道从哪里开始 这是我当前的 CMakeLists txt cmake minimum required VERSION 3 20 project
  • 如何使用cmake查找库?

    要将可执行文件与驻留在标准位置的库链接 可以在 CmakeLists txt 文件中执行以下操作 create executable generate mesh generate mesh cpp target link libraries
  • 将 gcov 与 CMake/CDash 结合使用的详细指南?

    我在我的项目中使用 CMake 并设置了 cdash 服务器以进行连续 夜间构建 一切运行良好 通过设置 crontab 我们可以将每小时 每晚的构建 测试结果自动上传到我们的 cdash 服务器 我的下一步是将测试覆盖率报告添加到构建中
  • Cmake:链接到静态内部库而不导出它

    我有一个具有以下结构的项目 path to my project CMakeLists txt internal libs internal lib1 libs lib1 lib2 lib1是一个静态库 lib2是一个静态库 interna
  • CMake 错误:“add_subdirectory 未给出二进制目录”

    我正在尝试将 Google Test 集成到更大项目的子项目中 但找不到令我满意的解决方案 我有两个限制 Google Test 的源代码已经位于项目结构中的某个位置 因此不能使用 URL 从 git 存储库下载它 Google Test
  • 如何使用cmake自动构建第三方库

    我在寻找什么 下载库 提取它 应用自定义补丁 运行配置 运行构建命令 我正在尝试构建的库是 Openssl Boost Thrift C ares Curl Pcre Nginx ICU JsonCPP 我想我可以使用外部模块做这些事情 h
  • 奇怪的函数参数名称行为

    我问了一个关于cmake和传递变量的问题here https stackoverflow com questions 14375519 cmake how to write a nice function that passes varia
  • CMake第三方库安装

    我是编程新手 对于我的研究项目 我需要安装一个第三方库以便与 CMake 一起使用 GitHub项目 https github com cpp io2d P0267 RefImpl blob master BUILDING md 我在我的电
  • 使用 CLion IDE 运行 Opengl 程序 [重复]

    这个问题在这里已经有答案了 我知道这个问题已经被问过 但提供的解决方案确实对我不起作用 我想通过 CLion IDE 运行我的 OpenGL 程序 我可以通过 Ubuntu 中的终端运行相同的程序 gcc progname c lglut
  • CMakeLists.txt:30(项目)处的 CMake 错误:找不到 CMAKE_C_COMPILER

    我正在尝试使用 CMake 制作 Visual Studio 解决方案来编译最新版本的 aseprite 并且 CMake 不断向我提供 No CMAKE C COMPILER could be found No CMAKE CXX COM
  • 在 CMake 中使用 -isystem 而不是 -I

    在使用 gcc 构建时 CMake 是否有任何方法可以强制通过 include directories 或者可能通过不同的函数 指定的路径使用 isystem 标志而不是 I 标志 See http gcc gnu org onlinedo
  • 如何配置 cmake 以链接到预构建的共享库?

    我有一个项目 在子目录中包含 opencv 的预构建版本 例如 我的项目 CMakeLists txt src 第三者 CMakeLists txt 开放式CV 包括 库 我想链接位于third party目录中的opencv版本 我的问题
  • 如何有条件地将 ALL 选项添加到 add_custom_target()?

    我想有条件地包含目标docs html to ALL如果用户选择 DO HTML 切换cmake gui 如何避免这种丑陋的代码重复 cmake minimum required VERSION 3 3 FATAL ERROR projec

随机推荐

  • 使用 PHAsset 获取用户照片库时如何分页

    我问同样的问题here我不明白如何实施解决方案 我尝试过以下方法 fileprivate func fetchPhotos indexSet IndexSet let allPhotos PHAsset fetchAssets with i
  • 从 Java BitSet 中随机选取 n 位中的 k 位

    如何准确挑选k来自 a 的位Java位集长度m with n位打开 其中k n m Example input m 20 n 11 Example output k 3 天真的方法 选择一个随机数0 i m 1 如果在输入端打开但在输出端未
  • WPF 数据绑定未更新?

    我有一个项目 我将复选框的 IsChecked 属性与代码隐藏中的 get set 绑定 但是 当应用程序加载时 由于某种原因它不会更新 出于好奇 我将其精简到最基本的内容 如下所示 using statements namespace N
  • 如何在画布上绘制平滑的线条而不清除它?

    I have a canvas that is adding dynamically to the page on on load I want to draw user s mouse path on the canvas but I f
  • mxGraph:使用 XML 创建图表

    我正在尝试从 xml 文件创建图表 我的 JavaScript 代码是 function loadXML console log Inside loadXML var doc mxUtils parseXml
  • 在 C++ 类中初始化数组和可修改的左值问题

    我有一个基本的 C 类 标题如下所示 pragma once class DataContainer public DataContainer void DataContainer void int getAgeGroup void int
  • Pandas 比较下一行

    我有一个像这样的数据框 d d z Q8 Q8 Q7 Q9 Q9 d t 10 30 10 31 10 38 10 40 10 41 d qty 20 20 9 12 12 我想比较第一行和第二行 数量与下一行相同并且 下一行中的 t 更大
  • 使用 CSS 将图像水平居中

    我正在尝试使用 css 将图像水平居中 我使用以下 HTML 代码在屏幕上显示我的图像 div class loading invisible img class loading src logo png div 我正在裁剪图像 因为我只想
  • Gzip 不工作,服务器 2012,IIS 8

    在 Windows Server 2012 标准 上的 IIS 8 上激活 Gzip 时出现问题 所以我激活了Windows功能中的压缩 我选中了 IIS 中的两个复选框 压缩 动态和静态 但仍然没有可用的 Gzip 但是 在我的本地主机
  • 使用python分割多页tiff图像

    我有一个功能可以分割多页 tiff from PIL import Image ImageSequence im Image open Sample tiff for i page in enumerate ImageSequence It
  • 如何编码Realm的List<>类型

    我正在尝试将 Realm 数据库编码为 JSON 一切正常 除了List lt gt 编码 所以我的问题是 你会如何编码List lt gt 因为List不符合可编码更近可解码协议 现在我正在这样做 objcMembers class Us
  • 动态 ng-init 变量 - Angularjs

    coffee FooCtrl gt scope products Product query html div div div class slideshow img div div 我想做这样的 但是ng init images prod
  • 在 AJAX 风格 jQuery UI 选项卡中加载的 jQuery UI 对话框窗口

    AJAX 选项卡工作得非常好 这部分非常简单 但是 让 AJAX UI 对话框模式窗口触发链接并不成功 任何对此的帮助将不胜感激 没有什么比那个男人更容易的了 试试这个
  • 使用 Photoshop JavaScript 执行系统命令行提示符

    我正在使用 Photoshop 使用动作集自动处理图像 我已将 javascript 添加到我的操作集之一 我想使用 javascript 发出 Windows 命令行提示符 这可能吗 有某种类型的system exec 函数来做到这一点
  • 使用会话测试 Rails 控制器

    在我的应用程序中 我有一个会话控制器 现在我想测试用户控制器 只有登录后才能访问该控制器 我的问题是如何伪造会话 我已经尝试了很多 所以我希望你现在可以帮助我 应用控制器 helper method current user def aut
  • 使用AsyncTask加载位图图像

    当有人使用我的应用程序时 我试图在后台加载图像 我写的逻辑是这样的 public class ImageLoader extends AsyncTask
  • 为什么时区感知日期时间的 tzinfo 不等于时区?

    gt gt gt import pytz gt gt gt tz pytz timezone America Chicago gt gt gt dt naive datetime year 2017 month 6 day 6 gt gt
  • 如何使用 GWT EventBus

    我想知道如何使用EventBus或者是否有一些更好的解决方案来发送Event通过该项目 Widget1 has a Button Widget2 has a Label 当我按下按钮时 它应该会改变 这些小部件位于DockLayout Ro
  • 如何使用 FastAPI 允许 OpenAPI 规范(Swagger UI)中的特定参数值? [复制]

    这个问题在这里已经有答案了 我正在阅读有关的教程路径参数验证 我想允许字符串 a b 和 c 作为可能的参数值 我希望这些值显示在 OpenAPI 文档中 即FastAPI 的自动文档 这样 API 用户就不必猜测它们 如何使这些值显示在文
  • 验证库在 CMake 脚本中的 target_link_libraries 之前可用

    我有一个大型项目 由多个构建目标组成 它们之间具有依赖关系 结构类似于这样 Application lt Library I lt Library II lt Library III lt lt Library IV 存在多个这样的应用程序