Nice programing

다른 파일의 내용을 읽어서 makefile에 변수 만들기

nicepro 2020. 12. 10. 21:06
반응형

다른 파일의 내용을 읽어서 makefile에 변수 만들기


다른 데이터 파일의 전체 내용이되는 값인 makefile에서 즉석에서 변수를 만들려면 어떻게해야합니까?


Makefile의 변수를 다른 파일의 내용으로 설정하는 것을 좋아한다고 생각합니다.

FILE=test.txt
VARIABLE=`cat $(FILE)`

target:
    echo $(VARIABLE)

GNU make 가정 :

file := whatever.txt
variable := $(shell cat ${file})

GNU make 버전 4.2는 파일 읽기 작업을 지원하므로 Maxim Egorushkin 의 훌륭한 답변 과 관련하여 이제이 문제를 해결할 수있는 선택적 방법이 있습니다.

FILE     := test.txt
variable :=$(file < $(FILE))

catWindows에는 존재하지 않습니다. Linux 및 Windows에서 작동하는 솔루션 :

cat := $(if $(filter $(OS),Windows_NT),type,cat)
variable := $(shell $(cat) filename)

설명 : Windows에서는 항상 OS'Windows_NT'와 동일하게 정의 된 환경 변수가있는 것 같습니다. 이런 식으로 Windows의 경우 type명령이 사용되고 Windows cat아닌 경우 에는 사용됩니다.


$(file op filename)추가 된 이후 훨씬 간단합니다 .

VARIABLE = $(file < my_file.txt)

매뉴얼 페이지 : https://www.gnu.org/software/make/manual/html_node/File-Function.html#index-file_002c-reading-from


플랫폼이 지정되지 않았기 때문에 이것이 Solaris에서 작동하는 방식입니다.

VERSION:sh = cat VERSION

all:
        echo $(VERSION)

GNU make를 사용하는 경우이 효과를 얻는 또 다른 방법은 다른 makefile의 make "include"를 사용하는 것입니다.

Makefile에서 :

include "./MyFile.mak"

내용이 포함 된 "MyFile.mak"파일을 만듭니다.

FILE := "my file content"
FILE += "more content 1"
FILE += "more content 2"

다음 은 디렉티브를 사용할 수없는 MAKE버전 3에서 작동하는보다 이식 가능한 솔루션 file입니다. 단점은 프로세스에서 임시 파일을 만들어야한다는 것입니다.

$(shell echo define my_variable > file.tmp)
$(shell cat my_file.txt >> file.tmp)
$(shell echo endef >> file.tmp)
include file.tmp

주요 아이디어는 여러 줄 define변수를 선언하도록 특별히 설계된 지시문 을 사용 하는 것입니다. 물론 shellMakefile 사용을 위해 명시 적으로 파일 내용을 쓸 수 있다면 임시 파일 사용을 피할 수 있습니다.

파일에 $기호 MAKE포함되어있는 경우 확장 될 때 my_variable(또는 할당 될 때를 사용하여 정의 할 ) 변수 / 지시문으로 확장하려고 시도합니다 :=. 피하려면 파일 내용을 포함하기 전에 이스케이프해야합니다. 예를 들어 대신 cat다음을 수행 할 수 있습니다.

$(shell sed 's/\$$/$$$$/g' my_file.txt >> file.tmp)

참고 URL : https://stackoverflow.com/questions/6767413/create-a-variable-in-a-makefile-by-reading-contents-of-another-file

반응형