디버깅 좀 하려고 하는데매우기본적이고 미완성데비안 패키징~을 위한오픈 딜런.
오류가 발생했습니다.Debian 빌드 로그(하이라이트).
관련 비트는 끝에 있습니다. 즉, 다음과 같습니다.
Preparing to install Open Dylan...
Copying sources...
cp: cannot create directory ‘/usr/local/sources’: Permission denied
Makefile:328: recipe for target 'install-stage' failed
이것은 분명히 342에서 시작하는 줄에 해당합니다. file.in 생성,지금 바로:
# Install stage installs stage 3 into prefix
install-stage:
@echo Preparing to install Open Dylan in $(prefix)...
@install -d $(prefix)
@echo Copying sources to $(prefix)/sources...
@rm -rf $(prefix)/sources
@cp -R $(abs_srcdir)/sources $(prefix)
마지막 줄이 범인일 수도 있지만 무엇이 잘못되었는지 확인하는 데 어려움을 겪고 있습니다.
실행하기 전에 각 줄을 일관되게 에코하도록 빌드를 얻을 수 있다면 많은 도움이 될 것입니다. 그러나 위에 인용된 발췌문에서 볼 수 있듯이 필요할 때 그런 일이 발생하지 않습니다. 그 라인에 있습니다 cp
.
참고: Open Dylan은 Autoconf를 사용하지만 Automake를 사용하지 않습니다. 그래서 그들은 손으로 쓴 것을 가지고 있습니다 Makefile.in
.
업데이트: 추가 make -n
및 dh_auto_build
재정의 dh_auto_install
가 유효합니다. 그러므로:
override_dh_auto_build:
PATH=$(binpath):$$PATH make -n
override_dh_auto_install:
PATH=$(binpath):$$PATH make -n install
이것새 빌드 로그(요점) 업스트림 Open Dylan Makefile 설치 대상에는 이제 다음 내용이 포함됩니다.
echo Preparing to install Open Dylan...
install -d /usr/local
echo Copying sources...
rm -rf /usr/local/sources
cp -R /usr/local/src/opendylan/opendylan-2014.1/sources /usr/local
find /usr/local/sources -depth -name '.*' -exec rm -rf {} \;
rm -rf /usr/local/sources/bootstrap1-registry
echo Installing Open Dylan in /usr/local
install -d /usr/local/bin /usr/local/databases /usr/local/lib /usr/local/lib/runtime
install -d /usr/local/share/opendylan /usr/local/include/opendylan
cp -R /usr/local/src/opendylan/opendylan-2014.1/Bootstrap.3/bin /usr/local
cp -R /usr/local/src/opendylan/opendylan-2014.1/Bootstrap.3/databases /usr/local
cp -R /usr/local/src/opendylan/opendylan-2014.1/Bootstrap.3/include/opendylan /usr/local/include
# We use force here because on Mac OS X, the lib directory likely contains read-only
# static libraries for the Boehm GC.
cp -Rf /usr/local/src/opendylan/opendylan-2014.1/Bootstrap.3/lib /usr/local
cp -Rf /usr/local/src/opendylan/opendylan-2014.1/Bootstrap.3/share/opendylan /usr/local/share
cp -R /usr/local/src/opendylan/opendylan-2014.1/tools/lldb /usr/local/share/opendylan
cp -R /usr/local/src/opendylan/opendylan-2014.1/tools/bash_completion /usr/local/share/opendylan
cp /usr/local/src/opendylan/opendylan-2014.1/License.txt /usr/local
cp /usr/local/src/opendylan/opendylan-2014.1/packages/unix/README /usr/local
echo Done!
이것은 분명히 처음부터 잘못된 것이었습니다. 어떤 이유에서인지, prefix
여기에 있고 /usr/local
그래야 한다고 /debian/tmp/usr
생각합니다.
첫 번째 줄Dylan Makefile.in 열기가지다:
prefix = $(DESTDIR)@prefix@
이건 좀 표준이 아닌 것 같습니다. 생성된 Makefile에서는 다음과 같습니다.
prefix = $(DESTDIR)/usr/local
일반적으로 데비안은 기본적으로 /usr
로 배송되므로 여기서 무슨 일이 일어나고 있는지 또는 왜 (분명히) 비어 있는지 ./configure
잘 모르겠습니다 .DESTDIR
답변1
@
"이 줄을 에코하지 마세요"라고 말하기 전의 일부 줄입니다.
@
Makefile에서 일부를 편집 및 제거하거나 모두 제거할 수 있습니다 .
sed -i -e 's/^\(\t\+)@/\1/ ; s/\(^\t\+\)echo/\1@echo/' Makefile
@Ortomala Lokni의 make doc 발췌문이 좋은 지적을 했으므로 명령 앞에 back을 추가 echo
하도록 sed 스크립트를 수정했습니다 .@
echo
@
변수를 사용하여 @NAME@
출력 Makefile로 변수를 바꾸는 Automake를 처리하려면 문자 제거에 더 주의해야 할 수도 있습니다 .
아마도 다음과 같이 시작하는 줄이 변경되지 않을 수도 있습니다 \t+@NAME@
.
sed -ire 's/^(\t+)@([^ @]+ )/(\t)\1/ ; s/(^\t+)echo/\1@echo/' Makefile.in
답변2
CAS 답변을 완료하려면 다음을 읽어보세요.GNU 제작 매뉴얼이는 다음과 같이 말합니다.
일반적으로 make는 레시피를 실행하기 전에 레시피의 각 줄을 인쇄합니다. 사용자가 직접 입력한 줄처럼 보이기 때문에 이를 에코라고 부릅니다.
줄이 "@"으로 시작하면 해당 줄의 에코가 억제됩니다. "@"는 해당 줄이 쉘에 전달되기 전에 삭제됩니다. 일반적으로 makefile의 진행 상황을 나타내는 데 사용되는 echo 명령과 같이 무언가를 인쇄하는 것만 효과가 있는 명령에 사용합니다.
@echo About to make distribution files
make에 "-n" 또는 "--just-print" 플래그가 지정되면 실행하지 않고 대부분의 레시피만 에코합니다. 옵션 요약을 참조하세요. 이 경우 "@"로 시작하는 레시피 라인도 인쇄됩니다. 이 플래그는 실제로 아이디어를 실행하는 것보다 어떤 레시피가 아이디어를 필요하게 만드는지 알아내는 데 유용합니다.
'-s' 또는 '--silent' 플래그는 마치 모든 레시피가 '@'으로 시작하는 것처럼 모든 에코를 방지합니다. 전제 조건이 없는 makefile의 특수 대상 .SILENT 규칙은 동일한 효과를 갖습니다(특수 내장 대상 이름 참조). .SILENT는 "@"이 더 유연하기 때문에 본질적으로 더 이상 사용되지 않습니다.