とても簡単に書きました。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で動作するようにどのように宣伝できますかMakefileCygwin


重要なコメントはここに組み込まれて回答されます。

  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)

別の場所にインストールする場合は、この変数DESTDIRまたはMakefile

スクリプトを実行するとルートに設定され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スクリプトは無料です。

関連情報