CMake 引用逃脱难题

2023-12-13

我似乎无法理解 CMake 的转义规则。鉴于:

set(X A B C)
add_custom_target( works COMMAND DUMMY=0 X="${X}" env | grep ^X= COMMENT "This works")
add_custom_target( fails COMMAND X="${X}" env | grep ^X= COMMENT "This fails")

目的是执行命令X="A B C" env。自定义目标works正确构造命令,其中fails错误执行:

X=\"A B C\" env ...

But why?


其实你遇到了两个问题:

  1. 不要在自定义命令中引用 CMake 变量。 CMake 将为您执行必要的转义序列。
  2. 之后的第一个文字COMMAND假定是命令名或文件。因此 CMake 尝试将其作为单个“字符串”处理。

所以我改变了引用和env打电话,以下内容对我有用:

cmake_minimum_required(VERSION 2.8)

project(QuotedStrings)

set(X "A B C")
add_custom_target( works COMMAND env DUMMY=0 X=${X} | grep ^X= COMMENT "This works")
add_custom_target( fails_no_more COMMAND env X=${X} | grep ^X= COMMENT "This works too")

有关更多详细信息和可能性,请参阅:

  • cmake:如何在自定义命令中包含文字双引号?
  • cmake:何时引用变量?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMake 引用逃脱难题 的相关文章

  • CMake:如何将 .def 文件添加到 Visual Studio 项目过滤器?

    如何将 def 文件添加到 Visual Studio 项目过滤器 filters文件 Visual Studio 使用 def 文件 CMake代码 set a src a cpp a def add library a SHARED a
  • grep 模式单引号和双引号

    封装和封装有什么区别grep单引号和双引号中的模式 grep abc file txt and grep abc file txt 我之所以这么问 是因为我无法自己测试所有可能的情况 而且我不想陷入错误的情况 如果你有特殊字符 我会看到不同
  • libSDL、CMake 和 Mac OS X Lion

    我正在尝试在我的Mac上编译cmake项目 但它取决于SDL框架 我安装了这个框架 在 cmake 之后向我报告找不到 libSDL 我自己设置了以下导出变量 按照 cmake 的建议 export SDL INCLUDE DIR Libr
  • 在 Android Studio 中使用预构建的共享库

    我需要在我的 android 项目中使用自定义的预构建共享库 在独立 ndk 上构建为 libdynamic so 我在路径 src main 中创建了一个文件夹 jniLibs 然后在其中创建了 4 个文件夹 即 armeabi arme
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • 非法转义字符“\”

    我想在链接末尾获取名称 所以我这样做了 if invName substring j k equals copyf invName substring 0 j Eclipse 说字符串文字没有用双引号正确关闭 如何将字符串与此字符进行比较
  • (如何)我可以抑制未找到包配置文件的警告吗?

    我正在尝试创建一个CMakeLists txt尝试查找的文件Qt5 如果失败 则尝试回退到Qt4安装 该脚本到目前为止有效 但如果出现以下情况我总会收到警告Qt5未安装 注意FindQt5 cmake是由提供Qt5并且仅当以下情况时才可用Q
  • CMake 和 Visual Studio:如何获得快速、安静的命令行构建?

    我有一个 cmake 项目 它成功地完成了我想要的一切 但我有大约 100 个文件 当我只需要重新编译一个文件时 我厌倦了每次看到生成的巨大输出 每个文件 30 行 明确地说 我正在编译cmake build 得到这个结果 我需要传递给编译
  • 每次我添加新的源子文件夹时,Cmake 都会重新编译所有内容

    我有一个项目树 组织如下 MyProjects build project1 CMakeLists txt project2 CMakeLists txt src project1 Project1Class1 h Project1Clas
  • cmake 生成 Xcode 项目 - 发布构建有效,但存档因链接器错误而失败

    使用 Xcode 6 3 1 CMake 3 2 2 我有一个与图书馆链接的项目 该库作为代码包含在 xcode project 中 经过编译 然后与主可执行文件链接 项目是用cmake生成的 CMakeLists txt 的一些摘录 ad
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • 使用 cmake 处理头文件依赖关系

    我正在一个小型 C 项目上使用 CMake 到目前为止 它运行得很好 有一点点 x 当我更改头文件时 通常需要重新编译许多源文件 直接或间接包含它的文件 但是 cmake 似乎只检测到some的源文件被重新编译 导致损坏状态 我可以通过清除
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • CMake:连续编译程序两次

    为了能够进行许多自动优化 我希望能够使用标志编译我的程序 fprofile generate首先 然后运行它生成配置文件 然后使用以下命令重新编译程序 fprofile use反而 这意味着我想连续编译我的程序两次 使用两个不同的CMAKE
  • 在 Blazor 中逃脱 @

    我想在 Blazor 组件中显示图标库中的图像 路径是 wwwroot lib icon open iconic icons account login svg But 是 Blazor 中的一个特殊角色 Quoting 剃刀语法 http
  • 在 MAC OSX 上使用 CMake 生成 .bundle 文件

    我想生成一个可执行文件 bundle文件于Mac OSX 10 6 8 using CMake 我的 CMakeLists txt 文件如下所示 cmake minimum required VERSION 2 8 PROJECT TEST
  • 在cmake中设置PKG_CONFIG_PATH

    我已经在本地构建了 opencv 并将其安装到本地目录 不是系统默认目录 opencv pc存在于该本地文件夹中的 pkgconfig 文件夹下 我怎样才能找到这个opencv pc来自 cmake 因为我想从我的程序链接并包含 openc
  • 在 C 中使用 pow 时,CMake 可以检测是否需要链接到 libm 吗?

    对于某些编译器 using powC 程序中的某些其他函数需要链接到m library https stackoverflow com q 8671366 1959975 但是 某些编译器不需要这样做 并且在链接到m图书馆 C 也存在几乎相
  • 如何将 gnatmake/gnatbind/gnatlink 集成到 C/Ada 代码的 CMake 文件中?

    我用几种语言 C C Fortran77 Fortran90 编写了代码 并且可以使用 CMake 编译它 没有任何问题 效果很完美 现在 我想在用 C 编写的 main 中添加一些 Ada 函数 并且我想通过 CMake 编译它 鉴于我无
  • 如何使用 PHP 通过 JSON 发送 HTML 元素?

    以下功能 try query this gt pdo gt prepare SELECT FROM bookings WHERE TourID AND dTourDate and Status NOT LIKE Cancelled quer

随机推荐

  • 为什么 info@example 根据 HTML5 有效?

    为什么电子邮件地址是这样的 info example 没有 TLD 验证
  • 尝试使用 printf 样式格式时出现“TypeError:无法连接 'str' 和 'int' 对象”

    我在这里没有看到问题 但 Python 的想法不同 x 3 y 7 z 2 print I told to the Python that the first variable is d x print Anyway 2nd and 3rd
  • 具有 NTLM 身份验证的 SOAP Web 服务的 Java 客户端

    我花了很多日日夜夜试图找到一个合适的 Java 框架 可以连接到使用 Negotiate NTLM 身份验证的 Microsoft Dynamics CRM 我使用 JAX WS Axis2 CXF 和各种 HTTP 协议处理程序尝试了 S
  • 命令行中的 MSBuild SonarQube 运行器

    我在使用 MSBuild SonarQube 运行程序分析项目时遇到问题 SonarQube 数据库和服务器已启动并正在运行 我尝试分析一个示例项目 一切顺利 但是当我尝试分析我的项目时 出了问题 分析完成时没有错误 但没有分析数据保存到数
  • Onclick仅刷新div

    您好 我需要刷新 div 的帮助 但不需要自动刷新 我的 div 是这样的 div div 我希望我点击了一些按钮 他们只刷新了我 div osvezi 感谢帮助 您可以使用 load 使用这样的选择器 function run when
  • Android 联系人自定义字段

    是否可以使用自定义 mimetype 如 facebook 配置文件 向某些联系人添加自定义字段 而无需编写同步适配器 身份验证器和同步服务 我不想为我的应用程序添加 同步 功能 经过长时间的研究 我想我找到了这个问题的答案 如果不编写一些
  • asp.net MVC 4 中 ajax 请求的授权属性

    我有一个操作方法并使用 ajax 发布到它 如下所示 ajax url GetSearchCriteria type GET these is must cache false these is for IE contentType app
  • 为什么 Symfony HTTP Client 遇到错误时无法访问响应内容,而是抛出异常?

    我想使用 Symfony HttpClient 发出请求从 OAUTH 服务器检索用户信息 但在遇到错误响应时无法直接获取响应 因为客户端抛出异常 我的用户提供者 public function loadUserByUsername use
  • 通过类和 ID 获取元素内的元素 - JavaScript

    好吧 我以前涉足过 JavaScript 但我写过的最有用的东西是 CSS 样式切换器 所以我对此有点陌生 假设我有这样的 HTML 代码 div div class bar Hello world div div 我该如何改变Hello
  • typedef 改变含义

    当我编译以下代码片段时g template
  • javascript - 年龄计算

    有 2 个 javascript 日期 第一个是生日 第二个是从该日期计算年龄的日期 最好的方法应该是什么 function calculateAge birthDate otherDate birthDate new Date birth
  • Safari 后退按钮不支持 PHP 注销会话

    我有一个 logout php 页面 它结束用户的会话并且运行良好 并执行以下操作 会话开始 session unset session destroy 我刚刚在使用 Safari 进行测试时注意到 当您注销时 您可以单击后退按钮返回到需要
  • 如何重现/清理混乱的 POST 参数以避免延迟作业的 YAML 序列化问题?

    今天 每次我开始delayed job工人 该进程将立即无声地终止 经过一番调查 并找出了前台模式delayed job 我终于发现问题出在了方法上delayed job序列化我的活动记录对象在 YAML 加载部分触发异常 Psych Sy
  • 应用程序因原因崩溃:集合 <__NSArrayM: 0x7071700> 在枚举时发生突变

    您能帮我找出单击分段控件后我的应用程序崩溃的原因吗 并非总是如此 但通常是在点击几次之后 错误信息 Terminating app due to uncaught exception NSGenericException reason Co
  • 将数据帧转换为 numpy 数组,值以逗号分隔

    场景 我已将 csv 以 t 分隔 读入 Dataframe 现在需要采用 numpy 数组格式进行聚类 而无需更改类型 问题 到目前为止 根据尝试的参考文献 如下 我未能获得所需的输出 我尝试获取的两列值位于 int64 float64
  • 与“int ()”的间接级别不同 (C)

    这段代码给了我这个错误 我不明白 我什至无法运行该程序 您能帮我解决这个错误吗 如果您不明白代码中的任何内容 请说出来 error C2040 CancelarPedido ppedido ppedido 与 int 的间接级别不同 pri
  • 对象从函数中的命名空间中消失

    我正在编写一个包装器来按行组合任意数量的数据集 由于有些变量可能具有唯一的变量 因此我首先限制数据中的变量 我的功能是这样工作的 rcombine lt function List Vars List2 lt lapply List sub
  • Python 中的字符串匹配

    我在列表中存储了300K个字符串 每个字符串的长度在10到400之间 我想删除那些作为其他字符串的子字符串的字符串 长度较短的字符串有更高的概率是其他字符串的子字符串 目前 我首先根据长度对这 300K 字符串进行排序 然后使用以下方法 s
  • SSRS 2008 R2 Globals!RenderFormat 导出方法

    有 7 个用于导出 SSRS 2008 报告的内置选项 我想知道在选择导出选项时是否有更简单的方法在 SSRS 中编写以下代码 IIF Globals RenderFormat Name WORD OR Globals RenderForm
  • CMake 引用逃脱难题

    我似乎无法理解 CMake 的转义规则 鉴于 set X A B C add custom target works COMMAND DUMMY 0 X X env grep X COMMENT This works add custom