Автоматическая генерация цели из исходного файла создания файла - PullRequest
3 голосов
/ 04 марта 2011

У меня есть эта структура каталогов.

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

Я хочу создать автоматическую цель из списка источников в make-файле. Поэтому мне не нужно писать правила для каждого файла.

Пример

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

Я хочу написать правило как

%.o:%.cpp

чтобы мне не приходилось повторять правило для каждого файла. Как мне этого добиться?

Ответы [ 3 ]

8 голосов
/ 04 марта 2011

Редактировать: команда поиска должна быть внутри переменной оболочки

Если вы используете Linux, я думаю, вы можете использовать:

SOURCES=$(shell find . -name *.cpp)
OBJECTS=$(SOURCES:%.cpp=%.o)

%.o: %.cpp
    <command to compile>
2 голосов
/ 21 апреля 2013
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

Для получения дополнительной информации см. Человек

2 голосов
/ 03 апреля 2012

Мне нравится ответ Сагар, хотя мне понадобилось немного времени, чтобы выяснить, что я хотел, чтобы дополнительное правило вызывало создание объектов:

    SOURCES=$(shell find . -name *.cpp)
    OBJECTS=$(SOURCES:%.cpp=%.o)

    all: $(OBJECTS)

    %.o: %.cpp
         <command to compile dependencies $< into target $@ >  $< -o  $@ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...