编辑成功后目标文件不存在时,您是否遇到过这种情况?
使用gnumake-4.2.1和gcc-arm-none-eabi-5_4-2016q3工具链在Windows上运行 我有一个makefile,我不是
的完整作者这是有趣的部分
DEPFLAGS = -MT $@ -MMD -MP -MF $@.d
$(OBJS_OUTPUT_FOLDER)/%.o : %.cpp
@$(CXX) -c $< -o $@ $(CFLAGS) $(DEPFLAGS) $(INC_FOLDERS_INT) $(LANGUAGE_STANDARD_CPP) \
&& echo $@ OK && $(CP) $@ C:/build/
这是控制台输出
build/bar.o OK
build/baz.o OK
build/foo.o OK
cp: can't stat 'build/foo.o': No such file or directory
make[1]: *** [Makefile:223: build/foo.o] Error 1
make[1]: *** Waiting for unfinished jobs....
检查文件系统显示foo.o确实不存在,有时也会丢失其他文件(例如baz.o.d)。 我真的不认为它是makefile的错,因为它最终会完成(通常在第二次到第三次尝试时不进行清理)。
当所有对象都完成后,我通常会遇到链接器错误
aaa.hh:183: undefined reference to `MyNamespace::MyFun(short, short, short)'
MyFun不在酒吧,baz也不在foo。应该包含MyFun的目标文件存在,但是它的大小是完全无意义的(556B),但是如果我手动删除它(正如在处理未定义的引用(作为已损坏的引用)时在SO上的其他地方所建议的那样)并再次进行所有操作它完成(现在大小约为1.5MB)并创建二进制文件。
编辑:
由于不正确的文件具有稳定的大小(好吧,暂时似乎如此)我添加了
@test `wc -c <$@` -ne 556;
到规则(Checking file size in makefile, stopping if file is too short),这会捕获错误的对象(我知道特定情况)并与.DELETE_ON_ERROR一起:我不必手动删除链接输出后找到的坏对象在这种情况下,控制台是
[ CXX ] build/bar.o
make[1]: *** [Makefile:219: build/bar.o] Error 1
make[1]: *** Deleting file 'build/bar.o'
而在另一种情况下
[ CXX ] build/foo.o
/spt/resources/sh: can't open build/foo.o: no such file
sh: 556: unknown operand
make[1]: *** [Makefile:220: build/foo.o] Error 2
所以它可能不是makefile删除它(我相信它会在第一种情况下宣布它)
EDIT2:
设置虚拟机(Windows 7)并再次制作项目(相同的makefile,相同的工具链,同样的制作)后,它顺利进行。我猜主机上确实有东西,可能是防病毒软件或其他一些企业安全软件...
提前致谢