【问题标题】:How to use find -exec in CMake execute_process?如何在 CMake execute_process 中使用 find -exec?
【发布时间】:2013-02-22 09:30:11
【问题描述】:

我使用 CMake install(DIRECTORIES...) 表单在安装时复制标题:

install(DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}
  DESTINATION include
  FILES_MATCHING PATTERN "*.h")

但是,这个命令does create empty directories(那些没有找到标题的地方)。因此,我想在安装过程中找到并删除那些空目录:

install(CODE "execute_process(
  COMMAND find -type d -empty -exec rmdir '{}' ';'
  WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}
  ERROR_FILE ${CMAKE_CURRENT_BINARY_DIR}/prune_empty_dirs.err)")

使用上面的命令,文件prune_empty_dirs.err 包含:

find: missing argument to `-exec'

我试图摆脱大括号,但它产生了相同的行为。我究竟做错了什么?谢谢,

【问题讨论】:

  • 您在 WORKING_DIREC 中有错字OTIR
  • 谢谢@ixSci 我修好了;但是错字不在我的脚本中!
  • 您是否尝试过不带 '' 或带双 '' 的命令? -exec rmdir {} ; 或 -exec rmdir ''{}'' '';'' 或 -exec \"rmdir {} ;\"
  • @ixSci 我尝试了引用您建议的可能方式,但它们都给出了相同的失败:-/ 但是,它确实可以通过执行 bash 和 find 来完成我所寻求的命令作为-c 的参数;感谢您的帮助
  • 我建议您首先不要创建文件夹,而不要稍后删除它们。您可以使用 FILE(GLOB) 来执行此操作 - 获取所需的所有文件,然后测试输出是否包含任何内容,如果不包含则不执行 INSTALL(DIRECTORIES)

标签: linux find installation cmake exec


【解决方案1】:

我找到了解决方案。它不是“{}”而不是分隔符“;”。以下语法对我有用(CMake 2.8.9):

--exec rm {} "\;"

【讨论】:

  • 在审核队列中遇到这个,看起来很危险,但我需要了解更多关于 cmake 的信息。你能再解释一下吗?
  • 在install()代码中调用find命令时,似乎解决方案是转义;而不是用引号括起来(否则字符串被截断)。
猜你喜欢
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 2014-03-16
  • 2018-03-06
相关资源
最近更新 更多