아주 간단하게 썼어요Makefile
$ cat Makefile
install_path=/usr/local/bin
script_name_1=encrypt-file-aes256
script_name_2=decrypt-file-aes256
.PHONY: install
.PHONY: uninstall
install:
install -m 0755 -o root -g root -t $(install_path) $(script_name_1) $(script_name_2)
uninstall:
rm $(install_path)/$(script_name_1) $(install_path)/$(script_name_2)
제가 테스트한 Linux Mint 18.3에서 매우 잘 작동합니다.
그러나 Cygwin
이것은 내가 얻는 오류입니다.
$ make install
install -m 0755 -o root -g root -t /usr/local/bin encrypt-file-aes256 decrypt-file-aes256
install: invalid user ‘root’
make: *** [Makefile:9: install] Error 1
root
거기에 사용자가 없다는 것을 알고 있지만 Cygwin
문제를 해결하는 방법을 모르겠습니다.
Linux에서 작동하도록 어떻게 홍보할 수 있나요 Makefile
?Cygwin
중요한 의견은 여기에 통합되어 답변됩니다.
-o
시스템에서 및-g
옵션이 완전히 제거 되면Cygwin
어떻게 됩니까 ?그런 다음 제대로 작동했지만 Linux 시스템에서는 사용자와 그룹이 잘못되었을 것 같습니다.
사용자 및 그룹 이름을 하드코딩하는 것은 좋지 않은 생각인 것 같습니다.
나는 그런 생각을 하지 않았다는 것을 인정하고, 지금 생각해보면 나도 그런 생각이 든다.
설치 경로를 하드코딩하지 않는 것이 좋습니다.
사용자가 설치할 위치를 결정하도록 하는 것은 멋진 아이디어입니다. 예, 동의합니다.
Makefile
Linux에서는 이것을 어떻게 부르나요 ?일반 사용자로서
sudo
, 즉sudo make install
.9번 선을 외부에서 작동하게 하면
make
작동할 것입니다. 이것은make
문제가 되지 않습니다.나는 이것이
make
문제가 되지 않는다는 것을 안다. 나는 그것을 일반화Makefile
하여 작동시키는 방법을 모르겠습니다Cygwin
.
답변1
Cygwin
다음은 호환성의 예입니다 Makefile
.
DESTDIR?=/usr/local/bin
install_path=$(DESTDIR)
USER_ID=$(shell whoami)
GROUP_ID=$(shell id -gn)
script_name_1=encrypt-file-aes256
script_name_2=decrypt-file-aes256
.PHONY: install
.PHONY: uninstall
install:
install -m 0755 -o $(USER_ID) -g $(GROUP_ID) -t $(install_path) $(script_name_1) $(script_name_2)
# with long options together with verbosity turned on it might be better for users
#install --verbose --mode=0755 --owner=$(USER_ID) --group=$(GROUP_ID) --target-directory=$(install_path) $(script_name_1) $(script_name_2)
uninstall:
rm $(install_path)/$(script_name_1) $(install_path)/$(script_name_2)
다른 위치에 설치하려는 경우 이 변수 DESTDIR
나 Makefile
.
스크립트를 실행하면 루트로 설정 sudo
됩니다 .GNU/Linux
USER_ID
노트:현재 에서 확인되었습니다 GNU/Linux
.
편집자 주:
에서 확인되었습니다
Cygwin
.모드가 변경되어
USER_ID
표준 내장GROUP_ID
으로 할당되었습니다 .shell
댓글에 자세한 긴 옵션 버전을 추가했습니다.
목적지를 변경하려면 다음과 같이 간단히 전화하면 됩니다.
DESTDIR=/desired/target/directory/ make install
답변2
이는 프로그램 문제가 아니라, 프로그램과 Cygwin 간의 비호환성 Makefile
으로 인해 발생하는 문제입니다 .install
root
사용자 없이 플랫폼에서 작동하는 이식 가능한 빌드 시스템을 원한다면 다음이 필요합니다.더 나은 것 install
현재 사용자가 파일 소유권을 원하는 사용자로 변경할 수 있는지 여부를 감지하는 프로그램입니다.
conf/install-sh
스크립트를 살펴보는 것이 좋습니다 .schilytools
팩.
지원을 위해 작성되었으며 Cygwin
스크립트는 무료입니다.