저는 모노를 사용하는 프로그램용 데비안 패키지를 만들려고 합니다. 내 make install
목표는 현재 모든 바이너리를 배치한 /usr/local/lib/mypackage
다음 /usr/local/bin
모노로 실제 바이너리를 호출하는 작은 실행 가능 스크립트를 만듭니다. 한 줄의 코드를 사용하여 자리 표시자를 PREFIX
실제 설치 경로로 바꿉니다 .
install: DESTDIR=/usr/local
install: LIBDIR=$(DESTDIR)/lib
install: BINDIR=$(DESTDIR)/bin
install: $(PHONIX) $(ANTLR) doc
install -m 0755 -d $(LIBDIR)/phonix
install -m 0755 -t $(LIBDIR)/phonix $(PHONIX) $(ANTLER)
install -m 0755 -D phonix.sh $(BINDIR)/phonix
sed -i "s!PREFIX!$(LIBDIR)!" $(BINDIR)/phonix
아래 에서 실행 dh_make
하고 필요에 따라 패키징 디렉터리를 가리킵니다. 모든 것이 패키저의 올바른 위치에 설치되지만 호출은 내 로컬 패키징 디렉터리에 대한 경로를 스크립트에 넣은 다음 문자 그대로 패키지에 배치합니다. 실제로 대상 시스템에 패키지를 설치하면 분명히 작동하지 않습니다.$(LIBDIR)
$(BINDIR)
sed
호출을 설치 후 스크립트로 이동 해야 한다고 생각 sed
하지만 설치 후 단계에서 로컬 설치 디렉터리를 가져오는 방법을 잘 모르겠습니다(my $(LIBDIR)
및 my와 도덕적으로 동일합니다. $(BINDIR)
아니면 더 좋은 방법이 있나요?
편집하다:이것은
phonix.sh
sed를 호출하기 전의 실제 파일입니다.
#!/usr/bin/sh
exec mono PREFIX/phonix.exe
보시다시피,오직이 파일의 목적은 모노 기반 .exe에 대한 실행 가능한 래퍼를 제공하는 것입니다. sed 호출 PREFIX
은 $(LIBDIR)
. 그래서 내가 정말 알아야 할 것은대상 시스템에서 .exe의 실제 설치 위치를 얻는 방법래퍼 스크립트가 이렇게 작동합니까?
답변1
DESTDIR
비표준 방식으로 사용하고 있습니다 . 패키지의 설치 접두사가 아니라 패키지 구축 등의 "fakeroot" 접두사입니다.
보다 일반적인 작성 방법은 다음과 같습니다.
prefix = /usr/local
bindir = $(prefix)/bin
libdir = $(prefix)/lib
install: $(PHONIX) $(ANTLR) doc
install -m 0755 -d $(DESTDIR)$(libdir)/phonix
install -m 0755 -t $(DESTDIR)$(libdir)/phonix $(PHONIX) $(ANTLER)
install -m 0755 -D phonix.sh $(DESTDIR)$(bindir)/phonix
sed -i "s!PREFIX!$(libdir)!" $(DESTDIR)$(bindir)/phonix
DESTDIR
패키지의 makefile을 비워 두십시오. debian/rules
dh 또는 cdbs로 설정하거나 자동으로 설정 해야 합니다 . 귀하의 질문에 따르면 실제로 어떻게 든 설정되었다고 추측합니다.