데비안 일반 make 파일에서 함수와 전역 변수를 정의할 수 있나요?

데비안 일반 make 파일에서 함수와 전역 변수를 정의할 수 있나요?

rules다른 섹션에서 사용하기 위해 debian make 파일에 함수와 전역 변수를 정의 할 수 있나요 override_****?

이것은 성공하지 못했습니다.

예를 들어, 아래는 내 스크립트 파일 중 하나에서 발췌한 것입니다. 또한 데비안 규칙 파일의 적용 범위 섹션 전반에 걸쳐 이 함수와 전역 변수를 사용하고 싶습니다.

# console output colors
NC='\033[0m' # No Color
RED='\033[1;31m'
BLUE='\033[1;34m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'

#return code
rc=999

######################### Functions #############################
function logCommandExecution()
{
    commandName=$1
    exitCode=$2
    #echo 'command name: '${commandName}' exitCode: '${exitCode}
    if [ ${exitCode} -eq 0 ] 
    then
        printf "${GREEN}${commandName}' completed successfully${NC}\n"
    else 
        printf "${RED}${commandName} failed with error code [${exitCode}]${NC}\n"
        exit ${exitCode}
    fi
}

답변1

debian/rules파일은 sh 파일이 아닌 make 파일입니다.

나는 그것을 시험해 보기 위해 makefile에 당신의 함수를 넣었습니다:

#!/usr/bin/make -f

# console output colors
NC='\033[0m' # No Color
RED='\033[1;31m'
GREEN='\033[1;32m'

######################### Functions #############################
function logCommandExecution()
{
    commandName=$1
    exitCode=$2
    #echo 'command name: '${commandName}' exitCode: '${exitCode}
    if [ ${exitCode} -eq 0 ] 
    then
        printf "${GREEN}${commandName}' completed successfully${NC}\n"
    else 
        printf "${RED}${commandName} failed with error code [${exitCode}]${NC}\n"
        exit ${exitCode}
    fi
}


all:
        logCommandExecution Passcmd 0
        logCommandExecution Failcmd 1

그런 다음 이 작업을 수행하려고 하면 다음과 같은 결과를 얻습니다.

$ make all
makefile:14: *** missing separator.  Stop.

그래서 대답은 간단하지 않습니다. 그러나 makefile에서 셸 구문을 실행하는 방법이 있습니다.
이 답변도움이 될 수도 있습니다.

가장 쉬운 방법은 함수를 다른 파일에 넣고 다음에서 호출하는 것입니다 debian/rules.

파일 생성:

#!/usr/bin/make -f
all:
        ./logCommandExecution Passcmd 0
        ./logCommandExecution Failcmd 1

로그 명령 실행:

#!/bin/sh

# console output colors
NC='\033[0m' # No Color
RED='\033[1;31m'
GREEN='\033[1;32m'

commandName=$1
exitCode=$2
#echo 'command name: '${commandName}' exitCode: '${exitCode}
if [ ${exitCode} -eq 0 ] 
then
    printf "${GREEN}${commandName}' completed successfully${NC}\n"
else 
    printf "${RED}${commandName} failed with error code [${exitCode}]${NC}\n"
    exit ${exitCode}
fi

이제 성공하면 다음을 얻습니다.

$ make
./logCommandExecution Passcmd 0
Passcmd' completed successfully
./logCommandExecution Failcmd 1
Failcmd failed with error code [1]
make: *** [makefile:5: all] Error 1

관련 정보