아주 간단하게 썼어요Makefile

아주 간단하게 썼어요Makefile

아주 간단하게 썼어요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


중요한 의견은 여기에 통합되어 답변됩니다.

  1. -o시스템에서 및 -g옵션이 완전히 제거 되면 Cygwin어떻게 됩니까 ?

    그런 다음 제대로 작동했지만 Linux 시스템에서는 사용자와 그룹이 잘못되었을 것 같습니다.

  2. 사용자 및 그룹 이름을 하드코딩하는 것은 좋지 않은 생각인 것 같습니다.

    나는 그런 생각을 하지 않았다는 것을 인정하고, 지금 생각해보면 나도 그런 생각이 든다.

  3. 설치 경로를 하드코딩하지 않는 것이 좋습니다.

    사용자가 설치할 위치를 결정하도록 하는 것은 멋진 아이디어입니다. 예, 동의합니다.

  4. MakefileLinux에서는 이것을 어떻게 부르나요 ?

    일반 사용자로서 sudo, 즉 sudo make install.

  5. 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)

다른 위치에 설치하려는 경우 이 변수 DESTDIRMakefile.

스크립트를 실행하면 루트로 설정 sudo됩니다 .GNU/LinuxUSER_ID

노트:현재 에서 확인되었습니다 GNU/Linux.

편집자 주:

  1. 에서 확인되었습니다 Cygwin.

  2. 모드가 변경되어 USER_ID표준 내장 GROUP_ID으로 할당되었습니다 .shell

  3. 댓글에 자세한 긴 옵션 버전을 추가했습니다.

  4. 목적지를 변경하려면 다음과 같이 간단히 전화하면 됩니다.

    DESTDIR=/desired/target/directory/ make install
    

답변2

이는 프로그램 문제가 아니라, 프로그램과 Cygwin 간의 비호환성 Makefile으로 인해 발생하는 문제입니다 .install

root사용자 없이 플랫폼에서 작동하는 이식 가능한 빌드 시스템을 원한다면 다음이 필요합니다.더 나은 것 install현재 사용자가 파일 소유권을 원하는 사용자로 변경할 수 있는지 여부를 감지하는 프로그램입니다.

conf/install-sh스크립트를 살펴보는 것이 좋습니다 .schilytools.

지원을 위해 작성되었으며 Cygwin스크립트는 무료입니다.

관련 정보