我正在大学学习C ++课程,他们希望我们手动输入所有的测试文件......但是,我知道有一种方法可以解决这个问题,这就是我最终的结果current(http://pastebin.com/6d9UtKM4)makefile。我的问题是,为什么这个makefile会在完成后自动删除它用于编译的所有.o文件?这不是杀了我,但我想保留.o文件。我已粘贴了makefile here(http://pastebin.com/6d9UtKM4)。我还粘贴了运行“make tests”here(http://pastebin.com/h3Ny3dib)的当前结果。 (注意该页面底部的部分会自动删除所有.o文件。)
我还希望能够像这样生成它:
换句话说,我希望它能够编译所有内容,然后运行所有内容。我希望这不是太多问题!
编辑:附加信息:(这是“进行测试”的代码)
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
答案 0 :(得分:11)
您可以添加
.PRECIOUS: %.o
这应该是隐含的,但也许你有一个奇怪的设置。
答案 1 :(得分:5)
将您的.o
文件视为中间文件并将其删除。您可以通过添加特殊.SECONDARY
目标的依赖项来阻止自动删除它们。有关详细信息,请参阅Chains of Implicit Rules。祝你好运!