从源列表生成文件自动生成目标

时间:2011-03-04 12:23:59

标签: makefile

我有这个目录结构。

app/
   src
   include
   lib/
       src
   maincode/
           main.cc
           Makefile

我想从makefile中的源列表生成自动目标。所以我不必为每个文件编写规则。

示例

source=\
        ../src/a.cpp
        ../src/ab.cpp
        ../lib/src/b.cpp

我想写像

这样的规则
%.o:%.cpp

这样我就不必为每个文件重复规则了。 我怎么能做到这一点?

3 个答案:

答案 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