Makefile变量依赖执行行为异常问题求助
问题根源与解决方案
核心问题是你给变量值添加了不必要的双引号,导致Makefile识别的目标和实际生成的文件不匹配。
具体分析
第一个Makefile的问题
你定义变量时写了:RESULTS_FILE = "benchmark_results"这里的变量值包含双引号,所以
all目标的依赖是带引号的文件名"benchmark_results"(引号属于文件名的一部分)。但执行touch $(RESULTS_FILE)时,shell会解析掉引号,实际生成的是不带引号的文件benchmark_results。Makefile每次检查依赖时,都找不到名为
"benchmark_results"的文件,因此会判定依赖未满足,重复执行touch命令。第二个Makefile的逻辑
直接用实际文件名benchmark_results作为依赖时,目标名称和实际生成的文件完全一致。第一次执行后文件存在,后续Makefile会判定依赖已满足,因此只会输出all executed。
修正后的第一个Makefile
只需去掉变量值的双引号即可:
RESULTS_FILE = benchmark_results all: $(RESULTS_FILE) $(RESULTS_FILE): touch $(RESULTS_FILE)
内容的提问来源于stack exchange,提问作者Osman
相关产品推荐
相关产品推荐

