cmake 正则处理 获取 #include "xx" 中的xx
时间: 2023-12-04 22:03:41 浏览: 66
可以使用正则表达式来匹配 `#include "xx"` 中的 `xx`。以下是一个示例 CMakeLists.txt 文件中如何使用正则表达式来获取 `#include` 中的文件名:
```cmake
cmake_minimum_required(VERSION 3.10)
project(my_project)
# 匹配 #include "xx"
set(include_regex "#include \"([^\"]+)\"")
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp file_contents)
string(REGEX MATCHALL ${include_regex} include_matches ${file_contents})
foreach(match ${include_matches})
string(REGEX REPLACE ${include_regex} "\\1" include_file ${match})
message("Found include file: ${include_file}")
endforeach()
```
这个例子中,我们使用 `file(READ ...)` 命令读取 `main.cpp` 文件的内容,并将其存储在变量 `file_contents` 中。然后,我们使用 `string(REGEX MATCHALL ...)` 命令匹配所有 `#include "xx"` 的语句,并将匹配结果存储在变量 `include_matches` 中。
接下来,我们使用 `foreach()` 循环遍历 `include_matches` 中的每一个匹配结果,并使用 `string(REGEX REPLACE ...)` 命令将匹配结果中的 `#include "` 和 `"` 删除,得到文件名 `include_file`。最后,我们使用 `message()` 命令输出找到的文件名。