2017-03-10 45 views
1

我在cmake中遇到了install(DIRECTORY FILE_MATCHING问题。我想获取所有文件扩展名为*.h或没有文件扩展名的文件。我使用了下面的代码,这是行不通的,因为看起来每个PATTERN都是用OR(布尔操作)计算的,*是每个文件的通配符,因此每个文件都被复制。CMake:安装(DIRECTORY)和不带扩展名的文件

install(DIRECTORY mydir 
    DESTINATION . 
    FILE_MATCHING 
    PATTERN "*.h" 
    PATTERN "*" 

有没有人知道我可以如何过滤该场景?

回答

2

过滤

PATTERN "*" 

确实匹配任何文件

对于比赛没有扩展只有文件,你可以使用正则表达式基于过滤:

REGEX "/[^.]+$" 
+0

THX。这样可行。 2分钟后,我的第一篇文章发现了REGEX命令,但我试图找到正确的表达式。你的工作正常,但令我感到恼火的是,我的正则表达式在regexr.com和regex101.com上工作,但不在cmake =>“^ [^。] + $”中,你知道为什么我的正则表达式在cmake中不起作用,/cmake正则表达式中的/特别吗? – tonka

+1

在CMake中,* PATTERN *仅应用于路径的最后一个组件*(即没有目录),但* REGEX *应用于**完整路径**。从'documentation'(https://cmake.org/cmake/help/v3.7/command/install.html)的'install'命令:“REGEX'将匹配完整路径的任何部分,但它可以使用'/'和'$'来模拟'PATTERN'行为。“ – Tsyvarev

+0

很高兴知道。 Thx – tonka