【问题标题】:custom_command ECHO with special character带有特殊字符的 custom_command ECHO
【发布时间】:2015-10-11 15:46:03
【问题描述】:

我正在尝试使用 CMake 添加 custom_command 并调用 COMMAND echo "$" > file.txt

只要我把$放进去,配置文件就会生成但构建失败。

我也尝试过 echo "\$" ,但似乎不起作用。

add_custom_command( TARGET ${TARGET_NAME}
                    POST_BUILD
                    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/out
                    COMMAND echo "-keep class com.android.**\$* { ; }" >> ./proguard.txt
                  )

cmake 命令有效,但只要我调用 ninja,就会出现以下错误:

error: 'src', needed by 'all', missing and no known rule to make it 

似乎 cmake 无法生成构建步骤。我的意图是将**$ 打印到一个文件中。

【问题讨论】:

  • 如果您发布自己的努力片段会有所帮助。
  • add_custom_command(TARGET ${TARGET_NAME} POST_BUILD WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/out COMMAND echo "-keep class com.android.**\$* { ; }" >> ./proguard .txt cmake 命令有效,但只要我调用 ninja,我就会收到以下错误:错误:'src','all' 需要,缺少并且没有已知的规则来使它看起来像 cmake 无法生成构建步骤. 我的意图是将 **$ 打印到文件中。
  • @apikachu:您的评论应该是您问题的一部分,因为它显着改变了它的含义。只需“编辑”您的问题并将您的评论复制粘贴到其中即可。
  • 我删除了我的评论,并声明您不能将重定向与add_custom_command 一起使用。我还更新了这个答案:stackoverflow.com/questions/31582344/…,其中仍然包含一些关于 add_custom_command 的陷阱的有用信息

标签: cmake


【解决方案1】:

两者

COMMAND echo "$$" > file.txt

COMMAND echo "$" > file.txt VERBATIM

输出$ 登录给定文件。

编辑:这适用于 makefile 生成器,并且仅当从终端运行 make 时。通常重定向符号“>”在COMMAND 表达式中没有按预期工作。

【讨论】:

  • 其实不支持,因为add_custom_command不支持重定向。
  • @DevSolar:它可以在我的机器上使用 cmake 2.8.9 和 makefile 生成器。在编写此答案时,问题不包含诸如忍者生成器之类的改进。
  • 啊....够公平的。我在几个不同的平台上使用 CMake,并且遇到了很久以前 tamas.kenez 链接到的问题。所以我只是在我的大脑中归档了“不起作用”,不知道它适用于 Makefile 的特定情况。如果你对你的答案做一个小的修改,我会收回反对票。
  • @DevSolar:我的回答增加了限制。
  • @apikachu 我刚刚在 Windows 上使用 CMake 3.3 和 Ninja 1.4 测试了 @Tsyvarev 解决方案,它工作正常。所以我有一种感觉,我们正在谈论在 Linux 或 Mac OS 上使用 Ninja。如果我是对的,请尝试使用单引号而不是双引号(请参阅How to echo a variable containing an unescaped dollar sign in bash)。并且通常要注意 $ 是 Ninja 中的转义字符(请参阅 Ninja:Lexical syntax)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2012-10-06
  • 2018-11-14
  • 2012-09-15
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多