다른 파일의 내용을 읽어서 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))
cat
Windows에는 존재하지 않습니다. 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
변수를 선언하도록 특별히 설계된 지시문 을 사용 하는 것입니다. 물론 shell
Makefile 사용을 위해 명시 적으로 파일 내용을 쓸 수 있다면 임시 파일 사용을 피할 수 있습니다.
파일에 $
기호 MAKE
가 포함되어있는 경우 확장 될 때 my_variable
(또는 할당 될 때를 사용하여 정의 할 때 ) 변수 / 지시문으로 확장하려고 시도합니다 :=
. 피하려면 파일 내용을 포함하기 전에 이스케이프해야합니다. 예를 들어 대신 cat
다음을 수행 할 수 있습니다.
$(shell sed 's/\$$/$$$$/g' my_file.txt >> file.tmp)
'Nice programing' 카테고리의 다른 글
C #에서 문자열을 색상으로 변환 (0) | 2020.12.10 |
---|---|
전달 된 의도에서 추가 항목 제거 (0) | 2020.12.10 |
Vim Command-T 플러그인 오류 : C 확장을로드 할 수 없습니다. (0) | 2020.12.10 |
데이터베이스에 저장된 이미지를 반환하는 Flask (0) | 2020.12.10 |
PostgreSQL IF 문 (0) | 2020.12.10 |