搜索文件
使用file(GLOB_RECURSE fileList searchDir/*.cpp)搜索searchDir目录下所有cpp文件,将路径保存到fileList中。
GLOB_RECURSE:启用递归搜索。
ps:searchDir不会被展开,如果searchDir中存在C/test/../test1,保存到fileList中的文件路径将仍然带有C/test/../test1,而不是C/test1.
移除文件
list(REMOVE_ITEM fileList ${removeList})
使用上述命令可从fileList移除不需要的文件路径。
ps:该移除命令不对文件的实际路径做判断,只对fileList和removeList中保存的字符串做匹配。
即:
file(GLOB_RECURSE fileList C/test/../test1/*.cpp)
file(GLOB_RECURSE removeList C/test1/*.cpp)
list(REMOVE_ITEM fileList ${removeList})
假设test1下存在a.cpp,list(REMOVE_ITEM)将无法移除fileList 中的"C/test/../test1/a.cpp",因为removeList 中存放的是"C/test1/a.cpp"。
因此,同时使用file(GLOB_RECURSE )与list(REMOVE_ITEM) 是,建议先定义prefixDir作为根目录,在根目录向下以绝对路径的方式给出搜索路径。
REAL_PATH、RELATIVE_PATH
REAL_PATH、RELATIVE_PATH可分别将路径转换为绝对路径与相对路径,或可以一种更简洁的方法处理上述情形。
仅做记录,暂未尝试,后续补充。