Boş bir dosyaya dokunma/oluşturma ve/veya izinleri, kullanıcı ve grubu ayarlama işlevini yazmaya çalışıyorum, Mümkünse, ya da değilse uyarın. Ancak, fonksiyonumdaki her koşullu kontrol doğru olarak değerlendiriliyor gibi görünüyor. olduğu
- $ (eğer ...): Benim Makefile
şartları
INSTALL_USER := fileUser INSTALL_GROUP := fileGroup .PHONY: test test: $(call touchFile,~/test.ini) define touchFile $(eval fileName := $(strip $(1))) -touch $(fileName) -chmod -c 664 $(fileName) $(info filename info $(fileName)) $(info $(shell stat -c "%a %U:%G" $(fileName))) $(if ifeq "foo" "bar", @echo match is broken, @echo match works) $(if ifneq "foo" "bar", @echo match works, @echo match is broken) $(if ifneq ($(shell stat -c %a $(fileName)),664), $(warning Error - $(fileName) does not have expected permissions of 664)) -chgrp -c $(INSTALL_GROUP) $(fileName) $(if ifneq ($(shell stat -c %G $(fileName)),$(INSTALL_GROUP)), $(warning Error - $(fileName) does not belong to $(INSTALL_GROUP) group)) -chown -c $(INSTALL_USER) $(fileName) $(if ifneq ($(shell stat -c %U $(fileName)),$(INSTALL_USER)), $(warning Error - $(fileName) does not belong to $(INSTALL_USER) user)) endef
make test
çıkışları ben kabul ettik
Koşu vardır/aşağıdaki çalıştı işlev bir parametre ile çağrılmadan önce "derleme zamanı" nda değerlendirilir. Ancak, sabit kodlanmışfilename info ~/test.ini 664 myUserName:myGroup Makefile:7: Error - ~/test.ini does not have expected permissions of 664 Makefile:7: Error - ~/test.ini does not belong to common group Makefile:7: Error - ~/test.ini does not belong to netserve user touch ~/test.ini chmod -c 664 ~/test.ini match is broken match works chgrp -c fileGroup ~/test.ini changed group of `/home/myUserName/test.ini' to fileGroup chown -c fileUser ~/test.ini chown: changing ownership of `/home/myUserName/test.ini': Operation not permitted make: [test] Error 1 (ignored)
ifeq "foo" "bar"
da geçersiz bir sonuç verir. Ayrıca,$(info ...)
doğru şekilde$(fileName)
"derleme zamanında" değerlendirir. - documentation aslında örnek vermez, bu nedenle
$(if ifeq...)
'a ek olarak, yok sayılıyor gibi görünen$(ifeq ...)
'u da denedim. Bir işlev içinde "İşlevsel olmayan"if
(yani$(if...)
olmadanifeq
)/bin/sh: ifeq: command not found
verir.
Birisi benim koşulların neden beklediğim gibi davranmadığını (veya yanlış şeyi neden beklediğimi) belirlemede yardımcı olabilir mi?
Kayıt: Dosya mevcut değilse hala düzeltilecek hatalar olduğunu biliyorum, ancak bu engelle karşılaştırıldığında önemsiz olmalı. geçirilen ilk bağımsız olmayan boş olduğunda
GNU web sitesi, hoş görünse de, neredeyse anlamsız olacak kadar özlü, değil mi? Size bir işlev söyleyecektir ve sonra nasıl kullanacağınıza dair size bir örnek vermeyeceklerdir, böylece sizi bununla ilgili olarak taciz edeceksiniz. – Xennex81