とても簡単に書きました。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
スクリプトは無料です。