nmake Makefile将目标文件放在一个单独的目录中

时间:2009-06-02 10:18:10

标签: makefile nmake

我的所有源文件都在Source文件夹中,makefile位于Makefile文件夹中,我希望所有目标文件都放在Objects文件夹中。这是一个我正在研究的C项目。所有这三个文件夹都位于名为Project的文件夹中。

项目文件夹包含:                            资源                            Makefile文件                            对象

我试图想办法让makefile从Source文件夹中编译源代码,我尝试过使用:

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

但这不起作用,我最后收到一条错误消息,但说不知道如何制作myfile.obj

4 个答案:

答案 0 :(得分:6)

试试这个:

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

如此处所述:http://msdn.microsoft.com/en-us/library/hk9ztb8x.aspx

答案 1 :(得分: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作为依赖。

答案 2 :(得分:0)

如果您使用的是Visual Studio,有时会收到错误消息:

“不知道如何制作'.obj'”

我能够通过打开'Makefile'来解决这个问题,并取消注释注释下面的行“在Visual Studio 2010中编译时取消注释以输出32位二进制文​​件”。找到与您的Visual Studio版本和您的体系结构(32位/ 64位)对应的注释,并取消注释下面的行!

答案 3 :(得分:0)

您应该添加目标,将当前目录更改为您要创建目标文件的目录。接下来是nmake示例Makefile文件。在示例中,nmake从当前目录编译a.c b.c并放置objs $(OBJ_FILES_DIR)目录并在$(OUTDIR)目录中构建SOME_STATIC.LIB。

# 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 $<