Сделать Makefile для размещения объектных файлов в отдельном каталоге - PullRequest
6 голосов
/ 02 июня 2009

Все мои исходные файлы находятся в папке Source, Makefile находится в папке Makefile, и я хочу, чтобы все объектные файлы были помещены в папку Objects. Это проект C, над которым я работаю. Все эти три папки находятся в папке с именем Project.

Папка проекта содержит: Источник Makefile Объекты

Я пытаюсь найти способ получить make-файл для компиляции исходного кода из папки Source, я попытался использовать:

...
SOURCE_DIR=..\Source
OUTPUT_DIR=..\Objects
.c.obj:
    $(CC) $(SOURCE_DIR)\$*.c /Fo$(OUTPUT_DIR)\$*.obj
...  

но это не работает, я получаю сообщение об ошибке, в то время как говорит, что не знает, как сделать myfile.obj

Ответы [ 4 ]

6 голосов
/ 06 января 2010

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

SOURCE_DIR=..\Source
OUTPUT_DIR=..\Objects
{$(SOURCE_DIR)}.c{$(OUTPUT_DIR)}.obj:
    $(CC) $* /Fo$<

Как объяснено здесь: http://msdn.microsoft.com/en-us/library/hk9ztb8x.aspx

0 голосов
/ 08 июня 2015

Вы должны добавить цель, изменив текущую директорию на директорию, где целевые файлы вы хотите сделать. Пример файла Makefile nmake приведен ниже. В примере nmake компилирует a.c b.c из текущего каталога и помещает каталог objs $ (OBJ_FILES_DIR) и создает каталог SOME_STATIC.LIB в $ (OUTDIR).

# commmand to launch Makefile
nmake OBJ_FILES_DIR=my_obj_dir OUTDIR=my_lib_dir

# Makefile
STATICLIB = SOME_STATIC.LIB
OBJS = a.obj b.obj # objs in lib
O = $(OBJ_FILES_DIR)
S = $(MAKEDIR)  # remember source dir where a.c b.c reside and current    dir from which nmake launched.

.PHONY: $(STATICLIB)
.PHONY: CHDIR

$(STATICLIB): CHDIR $(OUTDIR)$(STATICLIB) # 

CHDIR:
    -md $(O) 
    cd $(O)

all: $(STATICLIB) 

$(OUTDIR)$(STATICLIB): $(OBJS)
    $(AR) $(ARFLAGS) -out:$@ $(OBJS)

{$(S)}.c.obj::
    $(CC) $(WFLAGS) $(CFLAGS) -c $<
0 голосов
/ 17 октября 2012

Если вы используете Visual Studio, иногда вы получаете сообщение об ошибке:

"не знаю, как сделать '.obj'"

Мне удалось решить эту проблему, открыв Makefile и раскомментировав строки под комментарием, который гласит «Раскомментируйте их при компиляции в Visual Studio 2010 для вывода 32-битного двоичного файла». Найдите комментарий, который соответствует вашей версии Visual Studio и вашей архитектуре (32-битной / 64-битной) и раскомментируйте строки под этим!

0 голосов
/ 07 января 2010

Если буквально говорится don't know how to make myfile.obj, а не don't know how to make ..\Objects\myfile.obj, тогда ваша проблема в другом месте - что-то в make-файле запрашивает объектный файл в текущем каталоге.

Какому правилу нужно построить myfile.obj? Я предполагаю, что в этом правиле вы не можете указать $(OUTPUT_DIR)\myfile.obj в качестве зависимости.

...