我有一个像这样的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识别出已经添加了新文件并编译它们?
答案 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 ... ”