UNIX 사용자 정의 쉘 스크립트/명령

UNIX 사용자 정의 쉘 스크립트/명령

저는 명령줄 인터페이스(Linux 등)에 익숙해지고 있는데 다음과 같은 명령을 발견했습니다.

자식 [명령어]

..예를 들어

자식 푸시

나는 (C++로 개발된) 프로젝트를 가지고 있는데 그것이 맞는지 알고 싶습니다.다음과 같은 사용자 정의 명령을 생성할 수 있습니다.

(내 프로젝트가 "MyProject"라고 가정):

내 프로젝트가 컴파일됩니다.

그러면 어느 것이 gcc컴파일 명령을 실행하게 될까요?

참고: "컴파일"과 같은 자체 명령을 만드는 것이 가능하다는 것을 알고 있지만 "참조"와 "명령"을 사용하여 명령을 만들고 싶습니다.

답변1

일단 익숙해지면 쉘 스크립팅보다 더 쉬운 방법은 다음을 사용하는 것입니다.만들다, 이전에 해당 참조를 본 적이 있을 것입니다.

매우 간단한 makefile은 다음과 같습니다:

myproject: myproject.cpp
    g++ myproject.cpp -o myproject

지정하지 않으면 기본적으로 첫 번째 대상이 선택되며 make, 이 경우 대상이 하나뿐이므로 거기에 보이는 대로 수행됩니다. 대상은 콜론 앞의 레이블(myproject)입니다. 콜론 뒤는 필수 대상입니다. 이러한 대상이 나열되지 않으면 파일로 간주됩니다. 이 경우 myproject 대상("myproject" 바이너리)의 출력 이후 myproject.cpp가 변경되지 않은 경우 make는 아무 작업도 수행하지 않습니다. 그렇다면 다시 컴파일됩니다.

상황이 더욱 복잡해짐에 따라 make 사용의 가치는 더욱 명확해집니다.

flags = -Wall -g -O2

myproject: myproject.h myproject.cpp somepart.o
    g++ $(flags) somepart.o myproject.cpp -o myproject

somepart.o: somepart.h somepart.cpp
    g++ $(flags) -c somepart.cpp -o somepart.o

.h 파일은 필수 구성 요소입니다. 파일을 변경하는 경우 해당 파일이 필요한 부분을 다시 컴파일해야 하기 때문입니다. 이제 make somepart.o개체를 컴파일하거나 make최신 "somepart.o"가 필요한 첫 번째 대상(myproject)을 사용할 수 있으므로 사용할 수 없는 경우 모든 항목도 만듭니다.

bash 스크립트를 사용하여 이 작업을 수행하는 것은 그리 쉽지 않습니다. 아마도 그 make이유일 것입니다. 불행하게도 "요령을 익히는 것"에는 시간이 좀 걸릴 수 있습니다. l0b0은 다음 항목에 연결되었습니다.

http://www.gnu.org/software/make/manual/make.html

가장 먼저 주목해야 할 점은 make가 공백에 민감하다는 것입니다. 특히 공백 대신 실제 탭을 사용할 때 더욱 그렇습니다.

답변2

이를 수행하려면 일반적으로 를 사용 하지만 make compile다음과 같은 스크립트를 작성하여 직접 쉽게 만들 수 있습니다 MyProject.$1

case "$1" in
    compile)
        my_compile_command(s)
        shift
        ;;
    *)
        echo "$0: Unknown command: $1"
        exit 1
        ;;
esac

인용하다:

답변3

표준 명령을 유지하는 것이 좋습니다. 즉, make프로젝트 등을 컴파일합니다. 공동작업자가 인수하기가 더 쉽습니다.많은설정이 더 쉽고 무작위로 기억해야 할 항목이 줄어듭니다(또는 다음 시스템/프로젝트에 설정). 당신이 작업하게 될 대부분의 프로젝트는 당신 자신의 것이 아니며, 그 머신을 패치로 유지하는 것은 많은 문제를 야기할 것입니다.

관련 정보