2009-06-02 4 views
6

У меня есть все исходные файлы в папке «Исходный», Makefile находится в папке Makefile, и я хочу, чтобы все объектные файлы были помещены в папку «Объекты». Это работа над проектом C. Все эти три папки находятся в папке «Проект».nmake Makefile для размещения объектных файлов в отдельном каталоге

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

IAM пытается выяснить способ, чтобы получить Makefile компилировать исходный из папки Source, я попытался с помощью:

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

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

+0

Пожалуйста, добавьте часть, которая определяет, что должен делать make-файл. – Bahbar

ответ

0

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

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

0

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

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

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

0

Вы должны добавить цель, сменив текущий каталог на каталог, в котором должны быть созданы объектные файлы. Далее следует файл 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:[email protected] $(OBJS) 

{$(S)}.c.obj:: 
    $(CC) $(WFLAGS) $(CFLAGS) -c $< 
Смежные вопросы