다양한 수의 분기가 있는 하위 디렉터리 트리가 있고 대부분의 분기에는 .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
나는 이것을 잡았다클러그-메일링 리스트:
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.