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

Nec*_*twi 0 regex cmake

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

file(GLOB HEADERS *.h)
file(GLOB SOURCES *.cpp)
add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADERS})
Run Code Online (Sandbox Code Playgroud)

在macOS中,这包括类似文件,._Source.cpp._Header.h我尝试了REGEX

list(FILTER HEADERS REGEX "^[^\.].+" output_variable HEADERS)
list(FILTER SOURCES REGEX "^[^\.].+" output_variable SOURCES)
Run Code Online (Sandbox Code Playgroud)

但这不起作用。

Flo*_*ian 6

把我的评论变成答案

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 "^\\..+"
Run Code Online (Sandbox Code Playgroud)
  • list(FILTER ...)需求INCLUDEEXCLUDE关键字
  • file(GLOB ...)默认情况下将返回完整路径,所以你需要添加RELATIVE关键字
  • 正则表达式需要双反斜杠,因为CMake首先评估转义序列
  • 您不需要[](任何表达式),因为您只检查一个字符

参考