Linux(GCC 사용)에서 -가벼운- 컴파일 명령을 기록하는 방법은 무엇입니까?

Linux(GCC 사용)에서 -가벼운- 컴파일 명령을 기록하는 방법은 무엇입니까?

어떤 경우에는 Linux에서 GCC를 통해 컴파일 명령을 기록하는 것이 합리적입니다.

(컴파일 명령, 성공 또는 실패, CPU 및 실행하는 데 걸린 실시간 시간, 소스 파일 크기 등을 기록하고 싶습니다.) 이것동조영사기GCC 마일스톤여기에 동기를 부여하는 (고급) 예가 있습니다. 더 간단한 동기는 과거 컴파일에 대한 간단한 통계를 수행하는 것입니다(예: 100,000개 이상의 소스 파일을 먹었거나 5초 이상 걸린 컴파일, 예를 들어 여러 개의 작은 파일에 대해 큰 C++ 소스 파일을 리팩토링하기로 결정한 컴파일).

나는 (Linux에서) 이 작업을 수행하는 간단한 프로그램을 찾지 못했습니다... 하나(오픈 소스)를 알고 있다면 알려주십시오.

그러나 이는 더 간단한 용도로 사용될 수 있습니다. 난 그냥 내 안에 있었어github.com/bstarynk/misc-basile/리포지토리 C++ 프로그램로그인-gcc.cc(GPLv3+ 라이센스) 및 해당 빌드 스크립트편집 기록-gcc.sh

일반적인 용도는 다음과 같습니다.$HOME/bin/ 일찍귀하의 파일에 $PATH컴파일된 logged-gcc실행 파일과 logged-g++심볼릭 링크(동일한 $HOME/bin/ 디렉터리에 있음)를 추가한 다음 셸 스크립트를 만드세요. 예를 들면 다음과 같습니다.

#!/bin/bash
# file  ~/bin/gcc which should be executable
export LOGGED_CFLAGS='-g -Wall'
export LOGGED_GCC=/usr/bin/gcc-10
exec $HOME/bin/logged-gcc "$@"

그리고

#!/bin/bash
# file  ~/bin/g+ which should be executable
export LOGGED_CXXFLAGS='-g -Wall'
export LOGGED_GXX=/usr/bin/g++-10
exec $HOME/bin/logged-g++ "$@"

물론, 달리세요

$HOME/bin/logged-gcc --help 

도움을 요청하고,

$HOME/bin/logged-gcc --version 

버전 정보를 가져옵니다.

(실제로 $PATH위의 쉘 스크립트는 심볼릭 링크를 사용하는 영리한 트릭으로 피할 수 있습니다)

그런 다음 (Debian에서)를 사용하여 cat /var/log/messages로깅을 확인합니다.


물론 단순히 명령을 재지정하는 것이 아니라 gccCPU g++와 소요 시간, 입력 소스 파일의 크기 등을 측정하는 것이 포인트입니다 gcc. 이것이 "컴파일 명령 로깅"의 의미입니다. 나중에 그에 대한 통계를 수행할 수 있다는 의미입니다.

알아요-time 옵션( -freport-time또는 gcc. 입력 소스 파일의 크기를 측정하지 않습니다. 저도 알고 있습니다.gcc 플러그인기계류(참조이 초안보고서와 오래된GCC가 녹는다프로젝트).

가능한 한 투명하게 컴파일 명령을 문서화하고 벤치마킹하고 싶습니다.(예를 들어 위의 트릭을 사용한 다음 my 에 $PATH환경 변수를 설정하면 됩니다 .)LOGGER_SQLITE~/.zshrc그리고미성년자높은(따라서 더 많은 프로세스가 분기됩니다.로거(1)또는뒤(1)아니요일부 컴파일 이후의 옵션(예: 작은 C 소스 코드, 내 참조)기타 - 바젤저장소의 예)는 10분의 1초 미만 동안 지속될 수 있습니다.시간(7)). 벤치마크 작성gcc 플러그인버전에 따라 다를 수 있음걸프 협력 협의회Makefile, 너무 무거울 수 있으므로 -s를 다음으로 변경 해야 할 수도 있습니다.옮기다플러그인은 모든 명령에서 사용할 수 있습니다 gcc.

특정 사용 사례는 다음과 같습니다.참조 시스템몇 달 안에 프로젝트를 진행합니다(2021년 초). 점점 더 많은 C++ 코드를 생성하므로 컴파일 시간은 특히 여러 표준 C++를 사용할 때 더 적지만 더 큰 C++ 파일을 생성할지, 더 많지만 더 작은 파일을 생성할지 결정해야 합니다.컨테이너또는 GUI 툴킷(예:FLTK생성된 C++ 코드에서.

관련 정보