Автоматический make-файл с исходными и объектными файлами в разных каталогах - PullRequest
1 голос
/ 17 сентября 2011

Я пытаюсь собрать make-файл, который будет брать исходные файлы из каталога (например, src), компилировать их в объектные файлы в другом каталоге (например, build), а затем взять эти файлы и создайте статическую библиотеку из них в главном каталоге.

Вот мои усилия на данный момент:

LIBNAME := test
LIBNAME := lib$(LIBNAME).a

CC = g++
CFLAGS := -O0 -Wall -g -fPIC
INCLUDE := include
SOURCE := src
BUILD := build

CPPFILES := $(foreach dir, $(SOURCE)/, $(notdir $(wildcard $(SOURCE)/*.cpp)))
OBJFILES := $(addprefix $(BUILD)/, $(CPPFILES:.cpp=.o))

all: $(LIBNAME) $(OBJFILES)

$(LIBNAME): $(OBJFILES)
    ar rcs $(LIBNAME) $(OBJFILES)

.cpp.o:
    $(CC) $(CFLAGS) -I$(INCLUDE) -c $< -o $@

clean:
    rm -rf $(BUILD)

Что дает мне это:

make: *** No rule to make target `build/point.o', needed by `libtest.a'.  Stop

1 Ответ

3 голосов
/ 17 сентября 2011

Похоже, вам все равно требуется GNU make (функция foreach), поэтому переписывание правила суффикса старого стиля .cpp.o в

$(BUILD)/%.o : $(SOURCE)/%.cpp

должно помочь.Вы также можете попробовать использовать переменную VPATH или директиву vpath, см. Руководство по их использованию.

В общем, вы можете просто решить эту проблему с помощью automake, который выполняет большую часть этой работы за вас.1007 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...