CMake 中的绝对路径与相对路径

2024-02-16

我一直在尝试构建一个简单的 C++ 库。在使用相对路径构建的过程中,CMake 无法正确配置我的链接库所在的位置。使用绝对路径配置成功。这是让我放弃使用 CMake 的一些原因之一。设置路径的推荐方法是什么?是绝对路径还是相对路径,为什么?


given: cmake -H/foo -B/bar

在执行期间/foo/CMakeLists.txt:

${CMAKE_CURRENT_SOURCE_DIR} = /foo
${CMAKE_CURRENT_BINARY_DIR} = /bar

声明后project(Foo)

${PROJECT_SOURCE_DIR} = /foo
${PROJECT_BINARY_DIR} = /bar

然后在声明期间add_subdirectory(foo2),即执行/foo/foo2/CMakeLists.txt:

${CMAKE_CURRENT_SOURCE_DIR} = /foo/foo2
${CMAKE_CURRENT_BINARY_DIR} = /bar/foo2
${PROJECT_SOURCE_DIR} = /foo
${PROJECT_BINARY_DIR} = /bar

如果我们遇到另一个嵌套项目:project(Bar)

${CMAKE_CURRENT_SOURCE_DIR} = /foo/foo2
${CMAKE_CURRENT_BINARY_DIR} = /bar/foo2
${PROJECT_SOURCE_DIR} = /foo/foo2
${PROJECT_BINARY_DIR} = /bar/foo2

还有许多其他变量可以帮助您准确定位文件,请参阅

https://cmake.org/Wiki/CMake_Useful_Variables https://cmake.org/Wiki/CMake_Useful_Variables

命令如add_executable会尝试“找出”非显式文件在哪里,但在复杂的项目中依赖它并不是一个好主意。最好显式提供路径(使用可用的 CMAKE 变量)。

最后,如果你经常使用 cmake,你会得出这样的结论:源文件组织是它的弱点。

如果你像我一样幸运的话,你会偶然发现Sugar包裹:

https://github.com/ruslo/sugar https://github.com/ruslo/sugar

您所有的源文件(和文档)问题都将消失。

如果你交叉编译,你会需要 Polly:

https://github.com/ruslo/polly https://github.com/ruslo/polly

如果您依赖常见的第 3 方库,您可能会从 Hunter 中受益:

https://github.com/ruslo/hunter https://github.com/ruslo/hunter

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

CMake 中的绝对路径与相对路径 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 按成员序列化

    我已经实现了template
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 重载<<的返回值

    include
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 到 Web 服务的 XMLHttpRequest 在 Web Worker 中不起作用

    如果从主 javascript 调用 下面的代码可以完美运行 但它不会在 Web Worker 中运行 function getSpecData detailLvl startWeek endWeek mkt var params deta
  • Xcode 5 升级 - 现在 nsobject.h 存在类“NSObject”的重复接口定义错误

    我昨晚升级到了 X Code 5 现在 当我继续开发我的一个 iOS 应用程序 在以前的 Xcode 版本上编译得很好 时 我遇到了一个似乎无法解决的错误 当我构建应用程序时 出现编译错误 duplicate interface defin
  • iOS 5.x 和 iOS 6 调用 application:didFinishLaunchingWithOptions: 的次数不同

    Subj 在 iOS 5 x 中 我得到了方法调用的下一个结果 UIViewController initWithCoder UIApplicationDelegate didFinishLaunchingWithOptions UIVie
  • 容器适配器不支持迭代器

    在一篇关于 STL 的 C 文章中 有人说 由于容器适配器不支持迭代器 因此它们不能与 STL 算法一起使用 但它没有解释为什么容器适配器不支持迭代器 有人能给我同样的解释吗 具有迭代器的堆栈或队列有什么意义 根据定义 堆栈是只能压入和弹出
  • 使用 ggplot 绘制栅格因子值

    我在使用 ggplot2 绘制具有因子值的栅格时遇到问题 library ggplot2 library raster 首先 加载栅格数据 f lt system file external test grd package raster
  • Dart PetitParser 获取使用 ExpressionBuilder 创建的 AST 数据结构

    我是 petitparser 的新手 但它看起来像是解析器的声波螺丝刀 对于我的第一个项目 我正在构建代码来解析一个简单的表达式 该表达式构建 Node 对象的 AST 树 然后使用一些规则遍历该树以最小化不需要的括号 我不知道要传递什么到
  • 通过浏览器原生 Facebook 登录体验

    我见过这个问题的几种风格 但没有具体的答案 所以我自己尝试一下 我正在尝试通过浏览器在我的基于 Facebook 的应用程序中构建 Facebook 登录体验 这将要求用户尽可能不记住他们的密码 这意味着如果 他们通过桌面浏览器登录并且已经
  • Hibernate子对象不保存

    我有一个员工和员工部门表 一名员工可以拥有多个部门 我已经在 MySQL 中定义了表并使用 JPA 生成了实体 package model import java io Serializable import javax persisten
  • 使用prepareForSegue作为按钮

    您好 我以编程方式创建按钮并将按钮连接到另一个视图 但我遇到了 segue 问题 我应该对故事板使用prepareForSegue方法 但我不知道互联网上有一些示例 但当我使用该示例时我会收到错误 请你帮助我 提前致谢 这是我的代码 创建按
  • Ruby,堆栈级别太深(SystemStackError)

    我有以下代码 class BookPrice attr accessor price def initialize price price price end def price in cents Integer price 100 0 5
  • 如何在 Qt 中设置适用于 Windows 的应用程序版本?

    When my application crashes the Windows Event Viewer always reports my application version as 0 0 0 0 I can t figure how
  • 访问第三方库中的 web.config 文件

    我正在编写一个 IHttpFilter 它需要位于一个单独的项目 这些都是 C 项目 中 以便在一组 ASP NET MVC 应用程序中使用 在 IHttpFilter 中 我必须确定 web config 文件中指定的一些内容 有没有办法
  • jQuery 追加元素(如果不存在),否则替换

    这是一小段代码 var el something find test if el length something append div class test somecontent div else el replaceWith div
  • 从 C 调用 PHP

    我正在尝试编写一个使用 PHP 作为脚本语言的应用程序 该应用程序是一个 CGI 处理程序 我希望能够从中调用 PHP 页面 我正在寻找可以让我在 C 程序中初始化 PHP 的代码 然后向其传递包含 php 代码的缓冲区或文件名 以供其解析
  • 数据库选项:为什么默认情况下“SET ANSI_NULLS OFF”对于新数据库是关闭的?

    使用 SSMS 2014 当我使用 SSMS 创建新数据库时 新数据库的默认设置有一些奇怪的地方 ALTER DATABASE del SET ANSI NULL DEFAULT OFF GO ALTER DATABASE del SET
  • 汇编器 64b 除法

    我需要一些简单的方法来在 x86 的汇编器中除以 64b 无符号整数 我的号码保存在两个 32b 寄存器 EDX EAX 中 我需要将结果放回 EDX EAX 因数为 32b 整数 请给一些代码 如果我正确解释你的问题 特别是这部分Fact
  • 发送 AVAudioRecorder 到服务器 iOS

    在过去的几天里 我试图将本地保存的声音记录上传到服务器 该服务器使用 php 文件处理它并将其保存到服务器 问题是我找不到办法做到这一点 录制声音 AVAudioRecorder 时 它保存在 NSTemporaryDirectory 中
  • 如何生成一个字符重复n次的字符串?

    我可以使用下面的代码来生成一个字符串 awk e BEGIN for i 1 i lt 10 i s s x print s xxxxxxxxxx 但它的复杂性与字符串长度是超线性的 time awk e BEGIN for i 1 i l
  • 标记未在子视图 IOS SWIFT 的谷歌地图中定位

    你好 我试图将地图放入子视图中 但是当我将谷歌地图放入子视图中时 它无法工作 标记和 GPS 坐标也无法工作 With Sub View Without Sub View SWIFT代码 import UIKit import Google
  • CMake 中的绝对路径与相对路径

    我一直在尝试构建一个简单的 C 库 在使用相对路径构建的过程中 CMake 无法正确配置我的链接库所在的位置 使用绝对路径配置成功 这是让我放弃使用 CMake 的一些原因之一 设置路径的推荐方法是什么 是绝对路径还是相对路径 为什么 gi