因此,我有这样的文件(或值)列表
set(HEADER_FILES DirA/header1.h DirA/header2.hpp
DirB/header3.h DirB/stuff.hpp)
那么,我如何得到子目录的文件只在DirA?我使用CMake 2.8.x和我累了正则表达式匹配:
string(REGEX MATCHALL "DirA/(.+)" DirA_FILES ${HEADER_FILES})
但结果只是原始字符串的副本,如:“目录A/标题1. h目录A/标题2. hpp目录B/标题3. h目录B/内容.hpp”或者什么都不做。
好吧,又像往常一样,在写这个问题时我解决了它:
set(SubListMatch)
foreach(ITR ${HEADER_FILES})
if(ITR MATCHES "(.*)DirA/(.*)")
list(APPEND SubListMatch ${ITR})
endif()
endforeach()
但是CMake对我来说是一个很新的东西,那么我如何将代码 Package 成函数呢?到目前为止,我还没有写过任何CMake函数。
2条答案
按热度按时间pn9klfpd1#
您可以将其转换为如下函数:
当这段代码运行时,
SubListMatch
将保存匹配的元素。您可以改进该函数,例如,为目录名提供一个额外的参数,以便可以为
DirA
以外的其他项匹配:h7appiyu2#
这样如何?