2015-08-14 3020 views
1

我有有一個文件結構像這樣的小圖書館:CMake的排除從給定模式的文件後,文件(GLOB_RECURSE)

CMakeLists.txt 
LibFoo/ 
    Foo.h 
    FooWin.cpp 
    FooWin.inl 
    FooPosix.cpp 
    FooPosix.inl 

當我要建庫在特定的操作系統(例如Windows中),他們應該在列表中包含使用文件(GLOB_RECURSE)用宏之前:

macro(add_recursive dir retVal) 
file(GLOB_RECURSE ${retVal} ${dir}/*.h ${dir}/*.cpp ${dir}/*.c ${dir}/*.inl) 
endmacro() 

和我的排除模式是這樣的(Windows爲構建主機):*Posix.*但不工作,我嘗試用這種方法:

macro(add_recursive dir retVal pattern) 
file(GLOB_RECURSE ${retVal} ${dir}/*.h ${dir}/*.cpp ${dir}/*.c ${dir}/*.inl EXCLUDE PATTERN "${pattern}") 
endmacro() 

但POSIX文件仍然在這裏,CMake不報告錯誤或任何建議。

回答

2

對於file(GLOB_RECURSE ...)命令流沒有EXCLUDE選項。您可能需要從file(COPY|INSTALL ...)這個選項,這是一個不同的命令流程。

您可以遍歷列表,從file(GLOB_RECURSE)獲得和手動排除所需的文件:

macro(add_recursive dir retVal) 
    # Store unfiltered list of files into temporary list 
    file(GLOB_RECURSE _tmp_list ${dir}/*.h ${dir}/*.cpp ${dir}/*.c ${dir}/*.inl) 
    # Resulted list is initially empty. Copy all needed elements into it. 
    set(${retval}) 
    foreach(f ${_tmp_list}) 
     if(NOT f MATCHES "Posix.") 
      list(APPEND ${retVal} ${f}) 
     endif() 
    endforeach() 

endmacro() 
相關問題