2017-02-07 9 views
0

В моем проекте CMake C++, я добавляю исходные файлы таргетинга наCMake, как исключить ._ файлов в MacOS в FILE (GLOB) директива

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

В MacOS это в том числе файлы, такие как ._Source.cpp и ._Header.h I попробовал REGEX

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

но это не работает.

+0

Разве это не 'list (FILTER HEADERS INCLUDE REGEX"^[^ \.]. + ")'? – Florian

+0

@Florian Это дало 'подкоманду списка FILTER, чтобы список присутствовал.' Error – neckTwi

+0

@Florian Я исправил синтаксис, но все еще 'list (ФИЛЬТРЫ HEADERS EXCLUDE REGEX"^[\.]. + ")' Не имеет никакого эффекта , все еще '._' файлы включены – neckTwi

ответ

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 ...) потребности INCLUDE или EXCLUDE ключевого слова
  • file(GLOB ...) по умолчанию будет возвращать полный путь, так что вам нужно добавить RELATIVE ключевое слово
  • Регулярное выражение требует двойной обратной косой черты, потому что CMake сначала оценивает escape-последовательности
  • Вам не нужен [] (любой-оф-выражения), потому что вы проверяете только для одного символа

Reference