라는 프로그램을 작성해야 합니다.컴파일 디렉토리명령줄 인수로 디렉터리 경로를 받고 모든 c/cpp 파일을 컴파일합니다.
예를 들어 helloWorld.c
파일은 helloWorld.exe
.
compiled files
컴파일된 모든 파일은 현재 라이브러리 아래 이름의 폴더 에 배치되며 올바른 권한도 있어야 합니다.
필요한 명령을 어느 정도 알고 있지만 함께 사용할 수는 없습니다.
답변1
셸 루프를 사용하여 C 컴파일러를 명시적으로 호출합니다.
#!/bin/sh
mkdir -p "compiled files"
for src in "$1"/*.c "$1"/*.cpp; do
case $src in
*.c) compiler=${CC:-cc} ;;
*.cpp) compiler=${CXX:-c++} ;;
esac
command "$compiler" -o "compiled files"/"$( basename "$src" "${src##*.}" )exe" "$src"
done
설정되지 않거나 비어 있지 않는 한 쉘/환경 $CC
변수를 $CXX
컴파일러로 사용합니다. 이 경우 소스 파일의 접미사를 기본값으로 사용 cc
하거나 이에 따라 달라집니다.c++
암시적 규칙을 사용하여 쉘 루프를 사용하십시오 make
.
#!/bin/sh
mkdir -p "compiled files"
for src in "$1"/*.c "$1"/*.cpp; do
make "${src%.*}" && mv "${src%.*}" "compiled files"/"$( basename "$src" "${src##*.}" )exe"
done
이는 실행 파일을 빌드하기 위해 암시적 규칙을 사용합니다(이러한 규칙은 $CC
등과 $CXX
같은 환경 변수의 영향을 받습니다 $CFLAGS
). 빌드가 성공적으로 완료되면 .exe
파일에 파일 이름 접미사가 있어야 한다는 특정 요구 사항을 충족하도록 실행 파일의 이름이 변경됩니다 .
답변2
다음과 같은 것이 작동할 수 있습니다.
#! /bin/sh
mkdir -p 'compiled files'
for x in "$1"/*.c; do gcc $x -o "compiled files/${x%.c}.exe"; done
for x in "$1"/*.cpp; do g++ $x -o "compiled files/${x%.cpp}.exe"; done