Alain1405
Alain1405

Reputation: 2965

How to flatten #include paths in multiple file

I'm working on a C++ project with multiple libraries in subfolders. The cloud IDE I'm using requires all files to be in the same folder to use cloud flashing features. I now have 2 scripts. One that flattens the directory structure and one that flattens the includes to match the new layout. So far I've been adding the following to the script I use to replace absolute path of the includes:

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

The above line only works for #include "../lib/filename.hpp". How can I reformat this to match #include "any/path/filename.hpp" and replace with #include "filename.hpp"?

Upvotes: 0

Views: 206

Answers (1)

SLePort
SLePort

Reputation: 15461

Try this:

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 string and filename are captured from path and output using backreference.

Upvotes: 2

Related Questions