将行插入子目录中的文件的脚本

将行插入子目录中的文件的脚本

我有一个具有不同数量分支的子目录树,并且大多数分支都包含 .cpp 文件(其中很多)。我在树的根部有一个头文件,我想将其作为

#include "<constructed-relative-path-to-root>/headerfile.h"

作为每个 .cpp 的第一行。

另一种选择constructed-relative-path-to-root是硬编码路径,每当项目重新定位时都必须调整该路径)

第二种选择是将头文件的内容复制到每个 .cpp 文件的顶部

我不知道如何编写这样的脚本。有人可以帮忙吗?

答案1

从你的树根开始运行

find . -name \*cpp | while read FILE
do
    sed -i '1i #include "rootpath/headerfile.h"' "$FILE"
done

答案2

我抓住了这个CLUG-邮件列表:

base=$(pwd)
find . -type f -iname '*.cpp' | while read f ; do
   curr=$(dirname $f)
   relpath=$(python -c "import os.path; print os.path.relpath('$base',
'$curr')")
   sed -i -e '1i#include "'$relpath/headerfile.h'"' "$f"
done

将上述代码复制到文件中,使其可执行并从命令行运行。

答案3

如果您的目标是在您构建的每个源文件的开头包含一个头文件,并且您正在使用 gcc,那么您根本不需要更改您的文件;您可以简单地添加:

-include headerfile.h

到 gcc 命令行。从手册页:

   -include file
       Process file as if "#include "file"" appeared as the first line of
       the primary source file.  However, the first directory searched for
       file is the preprocessor's working directory instead of the
       directory containing the main source file.  If not found there, it
       is searched for in the remainder of the "#include "..."" search
       chain as normal.

相关内容