본문으로 바로가기

C++ :: 터미널 커맨드 하나로 컴파일과 실행 동시에 하기

category C++ 2018. 1. 20. 16:15
Edit

C++ :: 터미널 커맨드 하나로 컴파일과 실행 동시에 하기



C++ 파일을 리눅스에서 컴파일하다보니, -o 옵션으로 파일을 컴파일 후 다시 한번 실행해야 하는 귀찮음이 눈에 밟혔습니다. &&를 붙여 한번에 커맨드를 칠 수도 있지만, 저한테는 그것 역시도 상당히 귀찮았죠.

그래서 이 기회에 컴파일과 실행을 동시에 하는 run이라는 함수를 짜서 등록해봤습니다. bash에 대해 지식이 거의 없어서 상당히 해맸는데, 뭐 어찌어찌 잘 돌아가게 했네요. g++ -std=c++17 -o tmp tmp.cpp && ./tmp라는 커맨드를 run tmp.cpp 한줄로 만들었습니다.




.bashrc파일에는 터미널이 켜질 때 실행시키고 싶은 것들을 넣을 수 있습니다. 가령 상기 이미지의 해골 아스키 아트같은 것도 bashrc를 통해 출력할 수 있죠. 여하튼 이 파일에 run() 함수를 정의함으로써, 터미널 내에서 해당 함수를 사용할 수 있게끔 만드는 겁니다.

nano로 bashrc를 열어줍시다.

nano ~/.bashrc



열어보면 이것저것 많이 적혀 있는데, 맨 마지막으로 스크롤을 내려 다음의 함수를 추가해줍니다. 함수 내용을 들여다보면 파이썬 파일에 대해서도 나와있는데, 막상 run함수를 만들고 나니까 파이썬 파일도 실행하고 싶어져서 말이죠. 원치 않으신 분들은 elif부터 else전까지 지워주시면 되겠습니다.

아참, 터미널 위에 붙여넣기 할 때는 [Ctrl] + [Shift] + [V]를 눌러주셔야 합니다.


run(){
# Run *.cpp file with C++17
if [ ${1:(-4)} == ".cpp" ]; then
g++ -std=c++17 -o ${1::-4} $1
./${1::-4}
# Run *.py file with python3
elif [ ${1:(-3)} == ".py" ]; then
python3 $1
# Else raise Error
else
echo "[*] CRITICAL :: Unable to detect appropriate compiler."
fi
}




붙여넣은 후, [Ctrl] + [O]를 누르고 [Enter] 눌러서 저장, [Ctrl] + [X]를 눌러 빠져나오면 끝! 현재 열려 있는 터미널을 다 닫은 후 다시 열어보면, 터미널 내에서 run 함수를 사용하여 컴파일 할 수 있습니다.


run tmp.cpp



%23%20C++%20%3A%3A%20%uD130%uBBF8%uB110%20%uCEE4%uB9E8%uB4DC%20%uD558%uB098%uB85C%20%uCEF4%uD30C%uC77C%uACFC%20%uC2E4%uD589%20%uB3D9%uC2DC%uC5D0%20%uD558%uAE30%0A@%28public/cpp/%29%5B%uD2F0%uC2A4%uD1A0%uB9AC%5D%0A%0A%3Cbr%3E%3Cbr%3E%0A%0AC++%20%uD30C%uC77C%uC744%20%uB9AC%uB205%uC2A4%uC5D0%uC11C%20%uCEF4%uD30C%uC77C%uD558%uB2E4%uBCF4%uB2C8%2C%20-o%20%uC635%uC158%uC73C%uB85C%20%uD30C%uC77C%uC744%20%uCEF4%uD30C%uC77C%20%uD6C4%20%uB2E4%uC2DC%20%uD55C%uBC88%20%uC2E4%uD589%uD574%uC57C%20%uD558%uB294%20%uADC0%uCC2E%uC74C%uC774%20%uB208%uC5D0%20%uBC1F%uD614%uC2B5%uB2C8%uB2E4.%20%26%26%uB97C%20%uBD99%uC5EC%20%uD55C%uBC88%uC5D0%20%uCEE4%uB9E8%uB4DC%uB97C%20%uCE60%20%uC218%uB3C4%20%uC788%uC9C0%uB9CC%2C%20%uC800%uD55C%uD14C%uB294%20%uADF8%uAC83%20%uC5ED%uC2DC%uB3C4%20%uC0C1%uB2F9%uD788%20%uADC0%uCC2E%uC558%uC8E0.%0A%3Cbr%3E%0A%uADF8%uB798%uC11C%20%uC774%20%uAE30%uD68C%uC5D0%20%uCEF4%uD30C%uC77C%uACFC%20%uC2E4%uD589%uC744%20%uB3D9%uC2DC%uC5D0%20%uD558%uB294%20run%uC774%uB77C%uB294%20%uD568%uC218%uB97C%20%uC9DC%uC11C%20%uB4F1%uB85D%uD574%uBD24%uC2B5%uB2C8%uB2E4.%20bash%uC5D0%20%uB300%uD574%20%uC9C0%uC2DD%uC774%20%uAC70%uC758%20%uC5C6%uC5B4%uC11C%20%uC0C1%uB2F9%uD788%20%uD574%uB9F8%uB294%uB370%2C%20%uBB50%20%uC5B4%uCC0C%uC5B4%uCC0C%20%uC798%20%uB3CC%uC544%uAC00%uAC8C%20%uD588%uB124%uC694.%20**g++%20-std%3Dc++17%20-o%20tmp%20tmp.cpp%20%26%26%20./tmp**%uB77C%uB294%20%uCEE4%uB9E8%uB4DC%uB97C%20**run%20tmp.cpp**%20%uD55C%uC904%uB85C%20%uB9CC%uB4E4%uC5C8%uC2B5%uB2C8%uB2E4.%0A%3Cbr%3E%0A%21%5BAlt%20text%5D%28./Screenshot%20from%202018-01-20%2015-59-43.png%29%0A%3Cbr%3E%3Cbr%3E%0A**.bashrc**%uD30C%uC77C%uC5D0%uB294%20%uD130%uBBF8%uB110%uC774%20%uCF1C%uC9C8%20%uB54C%20%uC2E4%uD589%uC2DC%uD0A4%uACE0%20%uC2F6%uC740%20%uAC83%uB4E4%uC744%20%uB123%uC744%20%uC218%20%uC788%uC2B5%uB2C8%uB2E4.%20%uAC00%uB839%20%uC0C1%uAE30%20%uC774%uBBF8%uC9C0%uC758%20%uD574%uACE8%20%uC544%uC2A4%uD0A4%20%uC544%uD2B8%uAC19%uC740%20%uAC83%uB3C4%20bashrc%uB97C%20%uD1B5%uD574%20%uCD9C%uB825%uD560%20%uC218%20%uC788%uC8E0.%20%uC5EC%uD558%uD2BC%20%uC774%20%uD30C%uC77C%uC5D0%20run%28%29%20%uD568%uC218%uB97C%20%uC815%uC758%uD568%uC73C%uB85C%uC368%2C%20%uD130%uBBF8%uB110%20%uB0B4%uC5D0%uC11C%20%uD574%uB2F9%20%uD568%uC218%uB97C%20%uC0AC%uC6A9%uD560%20%uC218%20%uC788%uAC8C%uB054%20%uB9CC%uB4DC%uB294%20%uAC81%uB2C8%uB2E4.%0A%3Cbr%3E%0Anano%uB85C%20bashrc%uB97C%20%uC5F4%uC5B4%uC90D%uC2DC%uB2E4.%0A%3Cbr%3E%0A%60%60%60%20bash%0Anano%20%7E/.bashrc%0A%60%60%60%0A%3Cbr%3E%3Cbr%3E%0A%uC5F4%uC5B4%uBCF4%uBA74%20%uC774%uAC83%uC800%uAC83%20%uB9CE%uC774%20%uC801%uD600%20%uC788%uB294%uB370%2C%20%uB9E8%20%uB9C8%uC9C0%uB9C9%uC73C%uB85C%20%uC2A4%uD06C%uB864%uC744%20%uB0B4%uB824%20%uB2E4%uC74C%uC758%20%uD568%uC218%uB97C%20%uCD94%uAC00%uD574%uC90D%uB2C8%uB2E4.%20%uD568%uC218%20%uB0B4%uC6A9%uC744%20%uB4E4%uC5EC%uB2E4%uBCF4%uBA74%20%uD30C%uC774%uC36C%20%uD30C%uC77C%uC5D0%20%uB300%uD574%uC11C%uB3C4%20%uB098%uC640%uC788%uB294%uB370%2C%20%uB9C9%uC0C1%20run%uD568%uC218%uB97C%20%uB9CC%uB4E4%uACE0%20%uB098%uB2C8%uAE4C%20%uD30C%uC774%uC36C%20%uD30C%uC77C%uB3C4%20%uC2E4%uD589%uD558%uACE0%20%uC2F6%uC5B4%uC838%uC11C%20%uB9D0%uC774%uC8E0.%20%uC6D0%uCE58%20%uC54A%uC73C%uC2E0%20%uBD84%uB4E4%uC740%20elif%uBD80%uD130%20else%uC804%uAE4C%uC9C0%20%uC9C0%uC6CC%uC8FC%uC2DC%uBA74%20%uB418%uACA0%uC2B5%uB2C8%uB2E4.%0A%3Cbr%3E%0A%uC544%uCC38%2C%20%uD130%uBBF8%uB110%20%uC704%uC5D0%20%uBD99%uC5EC%uB123%uAE30%20%uD560%20%uB54C%uB294%20**%5BCtrl%5D%20+%20%5BShift%5D%20+%20%5BV%5D**%uB97C%20%uB20C%uB7EC%uC8FC%uC154%uC57C%20%uD569%uB2C8%uB2E4.%0A%3Cbr%3E%3Cbr%3E%0A%60%60%60bash%0Arun%28%29%7B%0A%20%20%20%20%23%20Run%20*.cpp%20file%20with%20C++17%0A%09if%20%5B%20%24%7B1%3A%28-4%29%7D%20%3D%3D%20%22.cpp%22%20%5D%3B%20then%0A%09%09g++%20-std%3Dc++17%20-o%20%24%7B1%3A%3A-4%7D%20%241%0A%09%09./%24%7B1%3A%3A-4%7D%0A%20%20%20%20%23%20Run%20*.py%20file%20with%20python3%0A%09elif%20%5B%20%24%7B1%3A%28-3%29%7D%20%3D%3D%20%22.py%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20python3%20%241%0A%20%20%20%20%23%20Else%20raise%20Error%0A%20%20%20%20else%0A%20%20%20%20%20%20%20%20echo%20%22%5B*%5D%20CRITICAL%20%3A%3A%20Unable%20to%20detect%20appropriate%20compiler.%22%0A%20%20%20%20fi%0A%7D%0A%60%60%60%0A%3Cbr%3E%0A%21%5BAlt%20text%5D%28./Screenshot%20from%202018-01-20%2016-09-50.png%29%0A%3Cbr%3E%0A%uBD99%uC5EC%uB123%uC740%20%uD6C4%2C%20**%5BCtrl%5D%20+%20%5BO%5D**%uB97C%20%uB204%uB974%uACE0%20**%5BEnter%5D**%20%uB20C%uB7EC%uC11C%20%uC800%uC7A5%2C%20**%5BCtrl%5D%20+%20%5BX%5D**%uB97C%20%uB20C%uB7EC%20%uBE60%uC838%uB098%uC624%uBA74%20%uB05D%21%20%uD604%uC7AC%20%uC5F4%uB824%20%uC788%uB294%20%uD130%uBBF8%uB110%uC744%20%uB2E4%20%uB2EB%uC740%20%uD6C4%20%uB2E4%uC2DC%20%uC5F4%uC5B4%uBCF4%uBA74%2C%20%uD130%uBBF8%uB110%20%uB0B4%uC5D0%uC11C%20run%20%uD568%uC218%uB97C%20%uC0AC%uC6A9%uD558%uC5EC%20%uCEF4%uD30C%uC77C%20%uD560%20%uC218%20%uC788%uC2B5%uB2C8%uB2E4.%0A%3Cbr%3E%3Cbr%3E%0A%0A%60%60%60bash%0Arun%20tmp.cpp%0A%60%60%60%0A%0A%3Cbr%3E%3Cbr%3E


'C++' 카테고리의 다른 글

C++ :: 소스파일, 헤더파일(*.h) 분리 예제  (1) 2017.12.17