我正在上大学的C++类(class),他们希望我们手动键入所有测试文件...但是,我知道有一种方法可以消除这种情况,这就是我最终得到current( http://pastebin.com/6d9UtKM4)生成文件。我的问题是,为什么该makefile完成后会自动删除其用于编译的所有.o文件?它并没有杀死我,但我想保留.o文件。我已经粘贴了makefile here(http://pastebin.com/6d9UtKM4)。我还粘贴了运行“make tests” here(http://pastebin.com/h3Ny3dib)的当前结果。 (请注意该页面底部的自动删除所有.o文件的部分。)

我还希望能够使它像这样生成它:

  • g++ -o compileDir/assembler.o -c -Wall src/assembler.cpp
  • g++ -o compileDir/string.o -c -Wall src/string.cpp
  • g++ -c -Wall -o compileDir/test_assignment.o testSrc/test_assignment.cpp
  • g++ -o testDir/test_assignment compileDir/test_assignment.o compileDir/string.o compileDir/assembler.o
  • g++ -c -Wall -o compileDir/test_bracket.o testSrc/test_bracket.cpp
  • g++ -o testDir/test_bracket compileDir/test_bracket.o compileDir/string.o compileDir/assembler.o
  • testDir/test_bracket
  • testDir/test_assignment

  • 换句话说,我希望它可以编译所有内容,然后运行所有内容。我希望这不是要问的太多!

    编辑:附加信息:(这是执行“进行测试”的代码)
    tests: assembler.o string.o $(test_output) $(test_stringOutput)
            @echo '--- Testing complete ---'
    
    $(testDir)%: $(compileDir)%.o string.o
            g++ -o $@ $< $(compileDir)string.o $(compileDir)assembler.o
            $@
            @echo ''
    
    $(compileDir)%.o: $(testSourceDir)%.cpp
            g++ -c -Wall -o $@ $<
    
    $(compileDir)%.o: $(testStringSrc)%.cpp
            g++ -c -Wall -o $@ $<
    

    编辑:-----------------------------------------

    通过评论解决:

    添加此行将其修复:
    .PRECIOUS $ {compileDir)%。o

    最佳答案

    您可以添加

    .PRECIOUS: %.o
    

    应该是隐式的,但是也许您有一个奇怪的设置。

    08-16 03:28