cmake 如何在 FILE(GLOB) 指令中排除 macOS 中的 ._ 文件



在我的 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)

但这行不通。

将我的评论变成答案

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 首先评估转义序列
  • 您不需要[](任何表达式(,因为您只检查单个字符

参考

  • CMake:如何替换正则表达式中的反斜杠文字?

最新更新