gpt4 book ai didi

makefile并行清理+编译问题

转载 作者:行者123 更新时间:2023-12-02 22:11:54 25 4
gpt4 key购买 nike

我有一个简单的 makefile,包含 3 条构建规则:

  1. clean(清理.o)
  2. 调试(使用调试内容编译我的代码)
  3. 发布(使用优化内容编译我的代码)

有时我想在 Debug模式和 Release模式之间切换,所以我会发出这个

make clean debug -j8

make clean release -j8

这有一个缺点,因为在执行干净的操作时,-j8 允许 make 跳转某些命令,因为 .o 仍然存在然后这些 .o 被 clean 规则删除,并且编译器提示因为它找不到那些 .o

我可以做类似的事情

make clean; make debug -j8

但是由于我在另一个目录中使用了奇怪的 makefile,因此命令变为

make -C ../src -f nMakefile clean ; make -C ../src -f nMakefile -j8 release

这更烦人。我想知道是否有一个隐藏大师模式规则允许我在一行中完成

希望它足够清楚......

最佳答案

我需要解决这个同样的问题,我提出的解决方案是解析 MAKECMDGOALSclean,并分派(dispatch)一个 shell 命令来进行实际的清理工作;而不是将清理构建作为目标。这样,任何包含“clean”的 MAKECMDGOALS 都会首先按顺序清理构建作为该构建的一部分,而不是作为自己的目标异步运行的 clean 。 p>

-include $(deps)
bin/%.o : %.cpp
@mkdir -p $@D
g++ $(flags) $(includes) -MMD -c $< -o $@

.PHONY : clean
clean:
@echo rm -rf bin/

ifneq ($(filter clean,$(MAKECMDGOALS)),)
$(shell rm -rf bin/)
endif

关于makefile并行清理+编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22645139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com