我有这个目录结构。
app/
src
include
lib/
src
maincode/
main.cc
Makefile
我想从makefile中的源列表生成自动目标。所以我不必为每个文件编写规则。
示例
source=\
../src/a.cpp
../src/ab.cpp
../lib/src/b.cpp
我想写像
这样的规则%.o:%.cpp
这样我就不必为每个文件重复规则了。 我怎么能做到这一点?
答案 0 :(得分:8)
编辑:find命令应该在shell变量
中如果您使用的是Linux,我认为您可以使用:
SOURCES=$(shell find . -name *.cpp)
OBJECTS=$(SOURCES:%.cpp=%.o)
%.o: %.cpp
<command to compile>
答案 1 :(得分:2)
我喜欢Sagar的回答,虽然我花了一些时间来弄清楚我想要一个额外的规则来创建对象:
SOURCES=$(shell find . -name *.cpp)
OBJECTS=$(SOURCES:%.cpp=%.o)
all: $(OBJECTS)
%.o: %.cpp
<command to compile dependencies $< into target $@ > $< -o $@
答案 2 :(得分:2)
CPP = g++
CPPFLAGS = -Wall -pedantic -O2 -g -c
SOURCES := ${wildcard *.cpp}
OBJECTS := ${SOURCES:.cpp=.o}
.PHONY: all clean
.SUFFIXES: .cpp .o
all: main
main: $(OBJECTS)
.cpp.o:
$(CPP) $(CPPFLAGS) $< -o $@
clean:
-rm -fv *.o
有关详细信息,请参阅the man