我嘗試在我的Makefile中將諸如foo/bar/baz.proto
之類的文件名轉換爲類似foo/bar/Baz.java
的文件。爲此,我想我可以使用sed
。然而,似乎如預期的那樣命令不起作用:使用sed在Makefile中使用大寫文件名稱
uppercase_file = $(shell echo "$(1)" | sed 's/\(.*\/\)\(.*\)/\1\u\2/')
# generated Java sources
PROTO_JAVA_TARGETS := ${PROTO_SPECS:$(SRCDIR)/%.proto=$(JAVAGEN)/$(call uppercase_file,%).java}
當我嘗試在命令行中運行sed命令似乎工作:
~$ echo "foo/bar/baz" | sed 's/\(.*\/\)\(.*\)/\1\u\2/'
foo/bar/Baz
任何想法,爲什麼這不在Makefile中工作?
UPDATE:
文件與下列目標生成的Java: $(JAVAGEN)/%.java: $(SRCDIR)/%.proto
如何申請替代也爲目標?
這是如何幫助我在Makefile? – machinekoder
'$(1)'應該是什麼? (我將它顯示的行放在makefile的全局範圍內,而不是在配方內部或函數定義中)。您需要發佈更多的makefile才能更清晰。 – blackghost
確保Makefile中的shell和sed路徑與沒有的路徑相同。 GNU make也有你可以使用的uc/lc函數。 – stevesliva