Software-Installation

如何使我的 Makefile 與 Cygwin 兼容?(安裝:無效使用者“root”)

  • June 14, 2018

我寫了一個很簡單的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 上工作?


重要評論在這裡整合和回答

  1. 如果您在系統上完全刪除-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.

編者註:

  1. 中驗證Cygwin
  2. 改變了方式USER_IDGROUP_ID分配給標準shell內置。
  3. 在評論中添加了冗長的長選項版本。
  4. 如果你想改變目的地,你可以簡單地呼叫,例如:
DESTDIR=/desired/target/directory/ make install

引用自:https://unix.stackexchange.com/questions/449234