Модификация make-файла для компиляции файлов .cc и .cpp - PullRequest
1 голос
/ 20 марта 2012

Я пытаюсь изменить мой make-файл для поддержки .cpp и .cc, однако я получаю сообщение об ошибке, например

target `source/systemFuncs.cpp' doesn't match the target pattern

Я изменяю существующий make-файл, поддерживающий .cc, и хочу, чтобы он также компилировал .cpp, но я не уверен, как. Первоначально это был файл make для проекта nacl.

Как мне скомпилировать .cpp и .cc?

Связанное содержимое с make-файлом:

x86_32_OBJS:=$(patsubst %.cc,%_32.o,$(CXX_SOURCES))
$(x86_32_OBJS) : %_32.o : %.cc $(THIS_MAKE)
    $(CXX) ${INCDIRS} -o $@ -c $< -m32 -O0 -g $(CXXFLAGS)

$(PROJECT)_x86_32.nexe : $(x86_32_OBJS)
    $(CXX) -o $@ $^ -m32 -O0 -g $(CXXFLAGS) $(LDFLAGS)

CXX_SOURCES содержит как файлы .cc, так и файлы .cpp, поэтому он должен иметь возможность компилировать оба

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

Вы не дали нам много, чтобы продолжить, но я сделаю предположение. Я думаю, что вы добавили source/systemFuncs.cpp к CXX_SOURCES. Затем сделайте удар по этой строке:

x86_32_OBJS:=$(patsubst %.cc,%_32.o,$(CXX_SOURCES))

, который заменил «.cc» на «_32.o», и оставил source/systemFuncs.cpp нетронутым. Затем Make попытался ввести это имя в правило, которое ожидало «_32.o», и завершился сбоем.

Попробуйте это:

CPP_SOURCES += source/systemFuncs.cpp

x86_32_CPP_OBJS:=$(patsubst %.cpp,%_32.o,$(CPP_SOURCES))

$(x86_32_CPP_OBJS) : %_32.o : %.cpp $(THIS_MAKE)
    $(CXX) ${INCDIRS} -o $@ -c $< -m32 -O0 -g $(CXXFLAGS)

Если повезет, это окажется грубым, но эффективным. Дальнейшие улучшения будут возможны позже.

EDIT:
Если оба набора имен файлов должны быть в одной переменной (CXX_SOURCES), вы можете разделить их следующим образом:

CC_SOURCES :=  $(filter %.cc, $(CXX_SOURCES))
CPP_SOURCES := $(filter %.cpp, $(CXX_SOURCES))

Достаточно ли этого?

0 голосов
/ 20 марта 2012

Вы можете создать отдельные, но (для исполнения) одинаковые правила:

(я пропустил THIS_MAKE, поскольку в приведенном выше коде он пуст, но вы можете добавить его)

# catch both
x86_32_OBJS:=$(addsuffix _32.o,$(basename $(CXX_SOURCES)))

# rule for .cc
$(patsubst %.cc,%_32.o,$(filter %.cc,$(CXX_SOURCES))):%_32.o: %.cc
     $(CXX) ${INCDIRS} -o $@ -c $< -m32 -O0 -g $(CXXFLAGS)

# rule for .cpp
$(patsubst %.cpp,%_32.o,$(filter %.cpp,$(CXX_SOURCES))):%_32.o: %.cpp
    $(CXX) ${INCDIRS} -o $@ -c $< -m32 -O0 -g $(CXXFLAGS)

$(PROJECT)_x86_32.nexe : $(x86_32_OBJS)
    $(CXX) -o $@ $^ -m32 -O0 -g $(CXXFLAGS) $(LDFLAGS)
...