Sto provando a scrivere una funzione di creazione per toccare/creare un file vuoto e/o impostare permessi, utente e gruppo, dove possibile, o avvisare se non. Tuttavia, ogni controllo condizionale all'interno della mia funzione sembra essere vero.
Gli elementi essenziali della mia Makefile sono
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
Esecuzione make test
uscite
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)
Ho considerato/provato i seguenti:
- $ (se ...) è valutato a "tempo di compilazione", prima che la funzione venga chiamata con un parametro. Ma il codice codificato
ifeq "foo" "bar"
fornisce anche un risultato non valido. Inoltre,$(info ...)
valuta correttamente$(fileName)
in "fase di compilazione". - Il documentation non fornisce effettivamente esempi, quindi oltre a
$(if ifeq...)
, ho anche provato$(ifeq ...)
, che sembrava essere ignorato. - "Non funzionale"
if
(vale a dire, ilifeq
senza il$(if...)
) all'interno di una funzione dà/bin/sh: ifeq: command not found
.
Qualcuno può aiutare a capire perché i miei condizionali non si comportano come mi aspetto (o perché mi aspetto la cosa sbagliata)?
Avvertenza: So che ci sono ancora bug da risolvere se il file non esiste, ma dovrebbe essere banale rispetto a questo ostacolo.
Il sito Web GNU, sebbene sia bello, è così succinto da essere quasi inutile, non è così. Vi diranno che esiste una funzione, e quindi non vi fornirà alcun esempio su come usarlo, in modo da molestarvi con esso. – Xennex81