![a.exe 대신 항상 코드 파일 이름으로 출력하도록 gcc를 구성할 수 있나요?](https://linux55.com/image/88285/a.exe%20%EB%8C%80%EC%8B%A0%20%ED%95%AD%EC%83%81%20%EC%BD%94%EB%93%9C%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9C%BC%EB%A1%9C%20%EC%B6%9C%EB%A0%A5%ED%95%98%EB%8F%84%EB%A1%9D%20gcc%EB%A5%BC%20%EA%B5%AC%EC%84%B1%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
기본적으로 실행 시 gcc test.c
gcc는 실행 파일을 a.exe
.gcc에서 생성할 수 있도록 전역적으로 재정의하는 방법이 있습니까 test.exe
?
이는 입력 파일이 하나만 있다고 가정합니다. 그렇지 않으면 gcc는 a.exe 또는 첫 번째 파일 이름을 사용하도록 선택할 수 있습니다.
답변1
이는 일반적으로 makefile 규칙을 통해 수행됩니다. 예를 들어 test.c
, 주어진 경우에도 이를 수행할 수 있습니다.아니요메이크파일이 있습니다):
make test
마찬가지로, g++에는 test2.cc
동일한 작업을 수행할 수 있다는 전제 하에 미리 정의된 규칙이 있습니다.
make test2
그러나 두 경우 모두 라이브러리가 필요할 것입니다. 이렇게 하면 makefile의 이점이 있습니다(여러 객체를 컴파일하는 방법을 제공하는 것 외에도).
gcc 자체에는 makefile 규칙을 에뮬레이트하는 옵션이 없습니다. 이를 수행할 수 있는 도구를 원한다면 언급된 특별한 경우를 수행하는 쉘 스크립트를 만들 수 있습니다.
#!/bin/sh
for name in "$@"
do
case "$name" in
*.c)
gcc -o $(basename "$name") "$name"
;;
*.cc)
g++ -o $(basename "$name") "$name"
;;
*)
echo "ignoring $name, since it is not one of my files!"
;;
esac
done
그러나(대답의 시작 부분 참조) 스크립트는 사전 정의된 규칙이 제공하는 내용을 명확히 합니다 make
. 반면에 당신은할 수 있다스크립트를 수정하여 필요한 라이브러리를 추가하고 한 곳에서 이 작업을 수행합니다(문제인 것처럼 보이는 makefile 세트 대신).
참고: gcc가 자동으로 ".exe" 접미사를 제공하는지 여부(그렇지 않은 경우)는 플랫폼과 컴파일러 구성에 따라 다릅니다. 이 접미사는 Unix 계열 플랫폼에서는 유용하지 않으며 일반적으로 Cygwin과 같은 관련 플랫폼에서는 선택 사항입니다.
답변2
gcc에서 바이너리를 생성하고 기본 컴파일된 .c 파일의 이름을 사용하도록 하는 방법을 찾을 수 없습니다. 그러나 gcc 대신 실행하도록 만든 빠른 bash 스크립트는 다음과 같습니다.
#!/bin/bash
temp=${1##*/}; output=${temp%.c}
gcc $1 -o $output $2
관련없이 기본적으로 이름으로 컴파일하고 파일이 있으면 바이너리를 실행하도록 스크립트를 확장했습니다. 나는 이것이 더 잘 조정될 수 있고 항상 그 이름을 가진 파일이 있는 것처럼 실행될 것이라고 확신하지만 그것은 내 목적에 적합합니다.
#!/bin/bash
temp=${1##*/}; output=${temp%.c}
gcc $1 -o $output $2
if [ -f $output ]; then
echo "==== $output being run ===="
./$output
fi