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

时间:2017-02-07 08:03:41

标签: regex cmake

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

但这不起作用。

1 个答案:

答案 0 :(得分:4)

将我的评论转化为答案

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

<强>参考