未创建Makefile对象文件

时间:2018-05-30 10:37:04

标签: makefile

编辑成功后目标文件不存在时,您是否遇到过这种情况?

使用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,相同的工具链,同样的制作)后,它顺利进行。我猜主机上确实有东西,可能是防病毒软件或其他一些企业安全软件...

提前致谢

0 个答案:

没有答案