帮助make文件

时间:2010-12-01 12:39:58

标签: c++ makefile

我有一个像这样的make文件.......一些文件在主目录中,另一些文件在tests目录中..

VPATH = tests

objects = main.o script.o factory.o serve.o enter.o\
           login.o notify.o check.o
script : $(objects)
    g++ $(objects) -lcurl -o script

main.o : script.h
script.o : enter.h login.h factory.h
factory.o : check.h notify.h serve.h
check.o :
serve.o : check.h
notify.o :
enter.o : check.h
login.o : check.h

.PHONY : clean
clean :
    -rm *.o script

我希望make将目标文件保存到其cpp文件来自的目录中..即如果script.cpp在tests文件夹中,那么我希望script.o也在test文件夹中...现在它只是将文件保存在主文件夹中..

提前致谢..

编辑1:       我需要稍后将文件添加到tests文件夹中。有没有办法让makefile识别出已经添加了新文件并编译它们?

2 个答案:

答案 0 :(得分:2)

您可以使用通配符来查找源文件,而不是对要构建的文件列表进行硬编码。您还可以使用替换将其转换为目标文件列表。提供一个通用规则,用于将.c构建为.o,您应该全部设置。

FILES_TO_BUILD := $(wildcard *.c) $(wildcard tests\*.c)
OBJECTS_FILES  := $(patsubst %.c,%.o,$(FILES_TO_BUILD))

%.o: %.c
    $(CC) $(COPTS) $^ # or whatever your compiler line is

script: $(OBJECT_FILES)
    g++ $^ -lcurl -o $@

我没有测试过这个makefile(它只是在我的脑海中),但它应该给你一些东西。

答案 1 :(得分:0)

您可以添加类似

的内容
 mv *.d $(VPATH)/
你的makefile中的

是这样的:

...
script : $(objects)
    g++ $(objects) -lcurl -o script
    mv *.d $(VPATH)/
...

您可能需要在 mv 前面添加 @ ,“ @mv ...