我无法正确使用路径替换。我有一大堆的源文件中SOURCES
:替换问题
@echo $(SOURCES)
foo.c bar.cpp bah.cxx
而且我想目标文件的列表:
# Imaginary only because nothing works
@echo $(OBJECTS)
foo.o bar.o bah.o
我试图用patsubst
打造OBJECTS
列表。首先,这会产生一个源文件和目标文件的列表。除了错误,它会导致链接失败的_main
的重复。
OBJECTS = $(patsubst %.c, %.o, ${SOURCES}) $(patsubst %.cc, %.o, ${SOURCES}) \
$(patsubst %.cpp, %.o, ${SOURCES}) $(patsubst %.cxx, %.o, ${SOURCES})
其次,这不执行替换。不仅是错误的,我找回原来的列表SOURCES
。
OBJECTS = $(patsubst %.c %.cc %.cpp %.cxx, %.o, ${SOURCES})
第三,这将产生源文件的原始名单:
OBJECTS = $(patsubst %.*, %.o, ${SOURCES})
我使用以下,这似乎乘以文件,就像兔子也尝试:
OBJECTS = $(SOURCES:.c=.o) $(SOURCES:.cc=.o) \
$(SOURCES:.cpp=.o) $(SOURCES:.cxx=.o)
如何一个人在使用便携式产品时执行扩展的简单替换?
完美,谢谢。这正是我所期待的。 – jww
比我的解决方案好得多。虽然我可能会用foreach,如果我真的写我的用来缩短它一点。 –