C++ 컴파일부터 실행까지 자동으로 하는 쉘 스크립트를 만들었다

5001 단어 C++BashZsh
최근 경쟁 프로 인구가 점점 늘고 있네요. 경쟁 프로 계기로 C++를 시작했다고 하는 분도 많은 것이 아닐까요.

이번에는 커맨드 라인에서 C++을 컴파일하고 실행하는 사람을 향해 그 두 가지를 단번에 해 버리는 스크립트를 소개합니다.

작성한 스크립트



다음을 .bashrc 또는 .zshrc에 추가하십시오.

함수명이나 컴파일 옵션 등은 적절히 변경해 주시면 좋겠습니다.

.bashrc
function runcpp () {
    echo -e "[\e[34mx\e[0m] g++ -std=gnu++17 -Wall -Wextra -O2 $1 -o a.out"
    g++ -std=gnu++17 -Wall -Wextra -O2 $1 -o a.out

    result=$?
    if [ $result -ne 0 ]
    then
        echo -e "[\e[31m-\e[0m] compile failed"
    else
        echo -e "[\e[32m+\e[0m] successful complie"
        echo -e "[\e[34mx\e[0m] run ./a.out"
        ./a.out
    fi
}

실행 결과



스크립트 설명



스크립트는 다음과 같이 사용합니다.
$ runcpp filename.cpp

내용의 흐름은
  • g++ 실행
  • 컴파일에 성공하면 ./a.out를 실행하고, 그렇지 않으면 종료

  • 라고 하는 매우 심플한 것입니다. 그러나 넷상에는 컴파일중인가 a.out 를 실행중인지 잘 모르는 것이 많이 「스크립트의 실행 상황을 알기 쉽게 표시」하는 것이 보이지 않았기 때문에 작성했습니다.

    첫째,
        echo -e "[\e[34mx\e[0m] g++ -std=gnu++17 -Wall -Wextra -O2 $1 -o a.out"
        g++ -std=gnu++17 -Wall -Wextra -O2 $1 -o a.out
    
    $1 에서 얻은 이름의 cpp 파일을 컴파일합니다.echo 명령에 [\e[34mx\e[0m] 와 엉망인 부분이 있습니다만, ANSI 이스케이프 시퀀스라고 하는 것을 사용해 터미널에서의 출력에 장식을 하고 있습니다. 이 경우 [x] g++ -std=gnu++17 -Wall -Wextra -O2 $1 -o a.out 와 출력하고 [x]x 는 파란색으로 표시됩니다.

    다음
        result=$?
        if [ $result -ne 0 ]
        then
            echo -e "[\e[31m-\e[0m] compile failed"
        else
            echo -e "[\e[32m+\e[0m] successful complie"
            echo -e "[\e[34mx\e[0m] run ./a.out"
            ./a.out
        fi
    

    하지만 우선 result 변수에 $? 라는 값을 대입하고 있습니다. $? 는 직전에 실행한 명령의 반환값을 포함하고 있습니다. 이번 「직전의 커맨드」라고 하는 것은 g++ 커멘드입니다. g++의 경우 컴파일에 성공하면 0가 반환됩니다.

    그리고 result 의 값이 0 가 아닌지, 그렇지 않은지로 분기하고 있습니다. ( -nqnot equal 의 약어 네요)
  • 0 가 아니면 [-] complie failed 라고 출력해 종료합니다.
  • 0이면 [+] successful complie 라고 출력하고 바로 a.out 를 실행합니다.

  • 끝에



    간단한 스크립트이지만 편리하므로 꼭 사용해보십시오!
    또한 응용하면 다른 언어의 컴파일 및 실행도 마찬가지로 자동화 할 수 있다고 생각하므로 시도해보십시오.

    좋은 웹페이지 즐겨찾기