在cmake中,可以使用GLOB_RECURSE命令来查找指定路径下的所有符合特定模式的文件。然而,目前的cmake版本(包括最新版本)并不支持直接在GLOB_RECURSE命令中忽略以某种方式结束的文件。
通常,我们可以通过在CMakeLists.txt文件中使用自定义的逻辑来实现这一功能。以下是一个示例的解决方案:
# 遍历文件夹并忽略以指定方式结束的文件
function(IGNORE_FILES_GLOB_RECURSE result folder pattern ignore_ending)
file(GLOB_RECURSE files ${folder}/${pattern})
set(filtered_files "")
foreach(file ${files})
string(FIND ${file} ${ignore_ending} ending_index REVERSE)
if(${ending_index} EQUAL -1)
list(APPEND filtered_files ${file})
endif()
endforeach()
set(${result} ${filtered_files} PARENT_SCOPE)
endfunction()
# 使用示例
set(ignore_ending ".txt") # 设置忽略以".txt"方式结束的文件
IGNORE_FILES_GLOB_RECURSE(my_files "${CMAKE_CURRENT_SOURCE_DIR}" "*" "${ignore_ending}")
# 输出结果
foreach(file ${my_files})
message("File: ${file}")
endforeach()
上述示例中,我们定义了一个名为IGNORE_FILES_GLOB_RECURSE的函数,该函数接受四个参数:result(保存结果的变量名)、folder(要搜索的文件夹路径)、pattern(文件匹配模式)、ignore_ending(要忽略的文件的结尾方式)。函数内部使用file命令的GLOB_RECURSE选项来搜索指定文件夹下的所有符合模式的文件,并通过自定义的逻辑来过滤掉结尾方式为ignore_ending的文件。最后,将过滤后的文件列表存储在result参数所指定的变量中,并通过PARENT_SCOPE选项使其在函数调用的上下文中可见。
使用时,我们可以将忽略的文件结尾方式通过设置ignore_ending变量来指定,然后调用IGNORE_FILES_GLOB_RECURSE函数来获取符合条件的文件列表。最后,可以根据需要对获取到的文件列表进行进一步的操作或输出。
需要注意的是,上述解决方案只是通过自定义的逻辑来实现忽略特定方式结束的文件,而非直接使用cmake提供的现有功能。此外,由于CMakeLists.txt文件本身是一个cmake脚本,因此可以在其中使用cmake提供的各种命令和函数来实现更加复杂的操作。
领取专属 10元无门槛券
手把手带您无忧上云