C++ 帮助制作文件
我有一个这样的文件。。。。。。。有些文件位于主目录中,有些文件位于测试目录中C++ 帮助制作文件,c++,makefile,C++,Makefile,我有一个这样的文件。。。。。。。有些文件位于主目录中,有些文件位于测试目录中 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 facto
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
我想将对象文件保存到其cpp文件的来源目录。。i、 e.如果script.cpp在tests文件夹中,那么我希望script.o也在tests文件夹中。。现在它只是将文件保存在主文件夹中
提前谢谢
编辑1:
我需要稍后将文件添加到tests文件夹。。有没有办法让makefile识别已添加的新文件并对其进行编译?您可以添加以下内容
mv *.d $(VPATH)/
在makefile中,类似于:
...
script : $(objects)
g++ $(objects) -lcurl -o script
mv *.d $(VPATH)/
...
您可能需要在mv前面添加@,“@mv…”而不是硬编码要生成的文件列表,您可以使用通配符查找源文件。还可以使用替换将其转换为对象文件列表。提供一个将.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(它只是我的一个想法),但它应该给你一些东西作为开始。使用VPATH对你来说是必不可少的吗?如果您只是显式地将tests/作为适当的对象文件名的前缀,那么一切都应该正常工作。考虑到示例项目中的文件非常少,使用
头文件:=$(通配符*.h)
查找所有头文件并使用%.o:%.c$(头文件)
使通用目标的所有内容都依赖于其他内容可能是最简单的。如果有任何更改,您将不得不重建所有内容,但只有14个文件,完整重建应该不会太糟糕。如果你有一个更大的项目,你可能会想要一个更有效的解决方案。