我正在一个C ++项目中,子文件夹中有多个库。我正在使用的Cloud IDE要求所有文件都在同一个文件夹中才能使用Cloud Flashing功能。
我现在有2个脚本。一种是扁平化目录结构,另一种是扁平化包含结构以匹配新布局。
到目前为止,我已经在脚本中添加了以下内容,以替换include的绝对路径:

find $(_CLOUD_SRC_FOLDER) -type f \( -iname \*.cpp -o -iname \*.hpp \) -maxdepth 3 -exec sed -i.bak 's/\#include "..\/lib\//#include "/g' {}

上一行仅适用于#include "../lib/filename.hpp"。如何重新格式化以匹配#include "any/path/filename.hpp"并替换为#include“ filename.hpp”?

最佳答案

尝试这个:

find $(_CLOUD_SRC_FOLDER) -type f \( -iname \*.cpp -o -iname \*.h  -o -iname \*.hpp \) -maxdepth 3 -exec sed -i.bak 's/\(#include "\)[^"]*\/\([^"]*"\)/\1\2/' {} +


#include字符串和文件名使用反向引用从路径和输出中捕获。

07-28 01:32
查看更多