입력으로 제공된 디렉터리에서 c/cpp 파일을 컴파일합니다.

입력으로 제공된 디렉터리에서 c/cpp 파일을 컴파일합니다.

라는 프로그램을 작성해야 합니다.컴파일 디렉토리명령줄 인수로 디렉터리 경로를 받고 모든 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

관련 정보