【问题标题】:cmake how to exclude ._ files in macos in FILE(GLOB ) directivecmake如何在FILE(GLOB)指令中排除macos中的._文件
【发布时间】:2017-02-07 08:03:40
【问题描述】:

在我的 cmake C++ 项目中,我将源文件添加到目标

file(GLOB HEADERS *.h)
file(GLOB SOURCES *.cpp)
add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADERS})

在 macOS 中,这包括像 ._Source.cpp._Header.h 这样的文件,我尝试了 REGEX

list(FILTER HEADERS REGEX "^[^\.].+" output_variable HEADERS)
list(FILTER SOURCES REGEX "^[^\.].+" output_variable SOURCES)

但这不起作用。

【问题讨论】:

  • 这不是list(FILTER HEADERS INCLUDE REGEX "^[^\.].+")吗?
  • @Florian 这给了list sub-command FILTER requires list to be present. 错误
  • @Florian 我已经更正了语法,但list(FILTER HEADERS EXCLUDE REGEX "^[\.].+") 仍然无效。仍然包含._ 文件
  • list(FILTER HEADERS EXCLUDE REGEX "^\\..+")?我忘记了 CMake 需要双反斜杠,因为它首先评估转义序列。
  • 另见here

标签: regex cmake


【解决方案1】:

把我的 cmets 变成答案

file(GLOB HEADERS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "*.h") 
file(GLOB SOURCES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "*.cpp") 

list(FILTER HEADERS EXCLUDE REGEX "^\\..+") 
list(FILTER SOURCES EXCLUDE REGEX "^\\..+"
  • list(FILTER ...) 需要 INCLUDEEXCLUDE 关键字
  • file(GLOB ...)默认会返回完整路径,所以需要添加RELATIVE关键字
  • 正则表达式需要双反斜杠,因为 CMake 首先评估转义序列
  • 您不需要 [](任何表达式),因为您只检查单个字符

参考

【讨论】:

  • list(FILTER ...) 在 cmake 3.6 中引入
猜你喜欢
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
  • 1970-01-01
  • 2021-10-20
  • 2010-11-04
  • 2016-04-24
相关资源
最近更新 更多