Tôi đang cố gắng viết hàm make để chạm/tạo tệp trống và/hoặc đặt quyền, người dùng và nhóm, nếu có thể, hoặc cảnh báo nếu không. Tuy nhiên, mọi kiểm tra có điều kiện trong hàm của tôi dường như được đánh giá là đúng.
Các yếu tố cần thiết của Makefile của tôi là
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
Chạy make test
đầu ra
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)
Tôi đã xem/thử như sau:
- $ (nếu ...) được được đánh giá tại "compile-time", trước khi hàm được gọi với tham số. Tuy nhiên, mã số cứng
ifeq "foo" "bar"
cũng cho kết quả không hợp lệ. Ngoài ra,$(info ...)
đánh giá chính xác$(fileName)
tại "thời gian biên dịch". - documentation không thực sự đưa ra ví dụ, vì vậy ngoài
$(if ifeq...)
, tôi cũng đã thử$(ifeq ...)
, dường như bị bỏ qua. - "Không hoạt động"
if
(ví dụ:ifeq
không có$(if...)
) bên trong một hàm cung cấp/bin/sh: ifeq: command not found
.
Ai đó có thể giúp xác định lý do tại sao điều kiện của tôi không hoạt động như tôi mong đợi (hoặc tại sao tôi đang mong đợi điều sai)?
Lưu ý: Tôi biết vẫn còn lỗi để được giải quyết nếu tệp không tồn tại, nhưng điều đó không đáng kể so với rào cản này.
Trang web GNU, mặc dù nó trông đẹp, rất gọn gàng như hầu như vô nghĩa, phải không. Họ sẽ cho bạn biết một chức năng tồn tại, và sau đó không cung cấp cho bạn bất kỳ ví dụ về cách sử dụng nó, để quấy rối bạn với nó. – Xennex81