我有一个小库,其文件结构如下:
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不报告错误或任何建议。
答案 0 :(得分:2)
EXCLUDE
命令流没有file(GLOB_RECURSE ...)
选项。您可能从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()
答案 1 :(得分:0)
您可以使用列表过滤来删除GLOB_RECURSE之后的项目:
# x = [list of x coords]
# y = [list of y coords]
# colors = [list of color triples]
# sizes = [list of marker sizes]
f,ax = plt.figure()
N = 10000
for i in range(N):
ax.plot(x[i],y[i], marker='.', color=colors[i], markersize = sizes[i])