我正在處理的存盤庫在非平面目錄結構中有多個源檔案,例如
project
│ main.cpp
│
└───moduleA
│ A.cpp
所有這些源檔案都有類似的代碼
#include "A.h"
WINDOWS_DISABLE_WARNING
#include "externalA.h"
#include "externalB.h"
WINDOWS_ENABLE_WARNING
// more code
如何遞回地使用宏和宏sed之間的尖括號包含替換所有引號包含,如下所示?WINDOWS_DISABLE_WARNINGWINDOWS_ENABLE_WARNING
#include "A.h"
WINDOWS_DISABLE_WARNING
#include <externalA.h>
#include <externalB.h>
WINDOWS_ENABLE_WARNING
// more code
我知道如何遞回地替換簡單的字串,例如find ./ -type f -exec sed -i 's/oldtext/newtext/' {} \;,但我正在努力弄清楚如何在兩個模式之間用尖括號替換引號。
我這樣做的原因是因為Visual Studio 最近引入了 /external:anglebrackets,如果啟用此標志,則尖括號中包含的任何標頭都被視為外部標頭,并且可以通過/external:W0. 這意味著不再有像在 Windows 上WINDOWS_DISABLE_WARNING定義的丑陋宏__pragma(warning(push,0)),否則通過 CMake定義為空,target_compile_definitions類似地WINDOWS_ENABLE_WARNING定義為__pragma(warning(pop))在 Windows 上,否則為空,通過 CMake 的target_compile_definitions. 由于使用sed遞回洗掉宏非常簡單,因此當使用/external啟用了新標志的松散撰寫的第三方庫時,最終代碼可以變得干凈,如下所示。
#include "A.h"
#include <externalA.h>
#include <externalB.h>
// more code
uj5u.com熱心網友回復:
閱讀有關sed 中的尋址行的資訊
find ... -exec sed -i '/WINDOWS_DISABLE_WARNING/,/WINDOWS_ENABLE_WARNING/ { s/"/</; s/"/>/ }' '{}'
在嘗試之前,請確保備份您的檔案 ( sed -i.bak)(或省略該-i選項)-i
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/359749.html
下一篇:如何避免可空參考型別的空引數
