file(GLOB_RECURSE )和list(REMOVE_ITEM )
解读这一段cmakelist
file(GLOB_RECURSE ALL_SRCS "*.cpp")
file(GLOB_RECURSE NODE_SRCS "src/*_node.cpp")
file(GLOB_RECURSE THIRD_PARTY_SRCS "third_party/*.cpp")
list(REMOVE_ITEM ALL_SRCS ${NODE_SRCS})
list(REMOVE_ITEM ALL_SRCS ${THIRD_PARTY_SRCS})
获取所有.cpp文件作为源文件(ALL_SRCS)(为列表ALL_SRCS) 但是剔除这两部分NODE_SRCS、THIRD_PARTY_SRCS
关于file GLOB_RECURSE
还可以指定目录,file(GLOB_RECURSE ALL_SRCS " *.cpp")
当然不止局限于这一类文件多种文件都可获得的
关于list
另外关于listcamke关于list官方文档
list(GET <list> <elementindex> [<element index> ...]
<output variable>)
list(APPEND <list><element> [<element> ...])
list(FIND <list> <value><output variable>)
list(INSERT <list><element_index> <element> [<element> ...])
list(REMOVE_ITEM <list> <value>[<value> ...])
list(REMOVE_AT <list><index> [<index> ...])
list(REMOVE_DUPLICATES <list>)
list(REVERSE <list>)
list(SORT <list>)
LENGTH返回列表的长度
GET返回列表中指定下标的元素
APPEND添加新元素到列表中
INSERT 将新元素插入到列表中指定的位置
REMOVE_ITEM从列表中删除某个元素
REMOVE_AT从列表中删除指定下标的元素
REMOVE_DUPLICATES从列表中删除重复的元素
REVERSE 将列表的内容实地反转,改变的是列表本身,而不是其副本
SORT 将列表按字母顺序实地排序,改变的是列表本身,而不是其副本
列表的子命令APPEND, INSERT, REMOVE_AT, REMOVE_ITEM,REMOVE_DUPLICATES, REVERSE以及SORT在当前的CMake变量域创建一些新值。与SET命令类似,即使列表本身是在父域中定义的,LIST命令也只会在当前域创建新的变量值,为了将这些操作的结果向上传递,需要通过SET PARENT_SCOPE, SET CACHE INTERNAL或其他值域扩展的方法。