Software-Installation
如何使我的 Makefile 與 Cygwin 兼容?(安裝:無效使用者“root”)
我寫了一個很簡單的
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
,但不知道如何修復它。如何概括
Makefile
它以使其Cygwin
在 Linux 上以及在 Linux 上工作?重要評論在這裡整合和回答
- 如果您在系統上完全刪除
-o
和-g
選項會發生什麼Cygwin
?然後它執行良好,但我想在 Linux 系統上使用者和組是錯誤的。 2. 硬編碼使用者名和組名似乎是個壞主意。
我承認我沒有想到這一點,當我現在考慮它時,我也這麼認為。 3. 我建議您不要對安裝路徑進行硬編碼。
這是一個好主意,是的,我同意,讓使用者決定他安裝它的位置。 4. 你是如何
Makefile
在 Linux 下呼叫它的?作為普通使用者
sudo
,即sudo make install
。 5. 如果您讓第 9 行在 之外工作make
,那麼它將起作用。這不是make
問題。我知道這不是
make
問題。我只是不知道如何概括Makefile
它也可以工作Cygwin
。
這是
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
,設置為root。GNU/Linux``USER_ID
**注意:**目前已在
GNU/Linux
.編者註:
- 中驗證
Cygwin
。- 改變了方式
USER_ID
並GROUP_ID
分配給標準shell
內置。- 在評論中添加了冗長的長選項版本。
- 如果你想改變目的地,你可以簡單地呼叫,例如:
DESTDIR=/desired/target/directory/ make install