Компиляция небольшого проекта Gcc в Windows с использованием MinGW - PullRequest
4 голосов
/ 06 августа 2009

, поэтому я программирую на C ++ уже почти 2 года, и в то же время я имел удовольствие использовать IDE (VS) с прекрасными настройками проекта, автоматической связью и тому подобным. Я всегда держался подальше от любых внешних библиотек, которые требовали от меня компиляции через make-файлы, или, по крайней мере, тех, которые предназначались для сред linux / других компиляторов.

В любом случае, теперь я хочу использовать супер удобную утилиту ( Bob Jenkins Perfect Minimal Hash) , но для этого требуется, чтобы я компилировал через make-файлы, не только это, но и с помощью компилятора g ++.

Я получил утилиту mingW32-make и теперь пытаюсь заставить ее работать. Где я сейчас нахожусь:

  • Успешно установлено minGW
  • Успешно вызвал утилиту make
  • Не удалось успешно создать проект.

Я получаю ошибку:

C: \ gen_progs \ фот> mingw32-марка

mingw32-make: *** Нет правил для создания цель lookupa.c', needed by lookupa.o '. Стоп.

И сам make-файл:

CFLAGS = -O

.cc.o:
    gcc $(CFLAGS) -c $<

O = lookupa.o recycle.o perfhex.o perfect.o

const64 : $(O)
    gcc -o perfect $(O) -lm

# DEPENDENCIES

lookupa.o : lookupa.c standard.h lookupa.h

recycle.o : recycle.c standard.h recycle.h

perfhex.o : perfhex.c standard.h lookupa.h recycle.h perfect.h

perfect.o : perfect.c standard.h lookupa.h recycle.h perfect.h

Теперь ошибка кажется разумной, по крайней мере, из-за моего минимального понимания make-файлов, у меня есть все упомянутые файлы .c, .h, однако у меня нет ни одного из файлов .o, и, похоже, нет никаких инструкций по как сделать это. Итак, мои вопросы:

я неправильно называю утилиту make? Или мне нужно сначала скомпилировать объектные файлы? Или ... мне нужно что-то добавить в файл make?

Снова у меня есть все упомянутые файлы .c и .h.

Редактировать: Извините за то, что я на самом деле пропустил тот конкретный файл, который, кажется, исчез где-то вдоль линии. Однако, добавив его обратно, я получаю ошибку:

c:\gen_progs\ph>mingw32-make 
cc -O   -c -o lookupa.o lookupa.c 
process_begin: CreateProcess(NULL, cc -O -c -o lookupa.o lookupa.c, ...) failed.

make (e=2): The system cannot find the file specified. 
mingw32-make: *** [lookupa.o] Error 2

Ответы [ 3 ]

9 голосов
/ 06 августа 2009

Относительно вашей ошибки "process_begin: CreateProcess (NULL, cc -O -c -o lookupa.o lookupa.c, ...) не выполнен."

Это потому, что утилита make хочет использовать компилятор "cc" для компиляции вашей программы, но этот компилятор не является частью Mingw-пакета.

Решение: замените «.cc.o:» на «.c.o:». Это изменяет неявное правило, которое сообщает Make, какой компилятор использовать (gcc на следующей строке) при компиляции .c файлов (оригинальная строка говорит ему, как компилировать .cc файлы).

7 голосов
/ 07 августа 2009

Если вы скажете либо make -DCC=gcc в командной строке, либо добавите строку CC=gcc в начало файла Makefile, это тоже решит проблему. Встроенные в Make правила обработки исходного кода на C все называют компилятором C с переменной CC, которая по умолчанию имеет значение "cc" из соображений обратной совместимости даже в Gnu Make.

Похоже, что оригинальный автор Makefile попытался обойти эту проблему, предоставив пользовательское правило для компиляции .cc файлов, но, поскольку в проекте нет файлов .cc, это правило фактически не использовалось.

Указание правильного значения для CC лучше, чем фиксированное правило для именования .c файлов ИМХО, поскольку файлы Makefile, как правило, проще в использовании и обслуживании и являются наиболее переносимыми, когда указывается минимально возможная информация.

1 голос
/ 06 августа 2009

Я не думаю, что отсутствие файлов .o является проблемой. Make сделает их из исходных файлов (файлы справа от двоеточия).

Ваша непосредственная проблема заключается в том, что make не может подать файл "lookupa.c". Из опубликованных вами правил мне кажется, что этот файл должен находиться в том же каталоге, что и make-файл, но это не так. Вам нужно выяснить, где находится этот файл и как его туда найти.

(По какой-то причине у меня есть мысленный образ Уайла Э. Койота, сидящего за своим компьютером, видящего имя этого файла, смотрящего вверх и покрытого наковальней).

...