程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Makefile 过滤掉只是...不起作用?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Makefile 过滤掉只是...不起作用??

开发过程中遇到Makefile 过滤掉只是...不起作用?的问题如何解决?下面主要结合日常开发的经验,给出你关于Makefile 过滤掉只是...不起作用?的解决方法建议,希望对你解决Makefile 过滤掉只是...不起作用?有所启发或帮助;

好的,我将包含一些关于我正在努力完成的事情的背景故事,请随意跳到最后的示例来演示我在说什么。

目前,我正在尝试围绕我的代码设置一个测试框架,尽可能减少对实际代码库的影响(我现在正在虑其他几个框架,并且想要使切换尽可能无痛)。我目前使用的方法是将我项目的所有目标文件与我的测试代码链接在一起,这样我就不必#include 源文件或使用其他一些技巧。

由于显而易见的原因,这种方法会导致 @H_971_5@main 函数出现问题;我目前的计划是不链接定义 @H_971_5@main 的项目中的目标文件。这会阻止我测试它,但它真的很简单,任何问题都会很明显,@R_972_9447@接受。 (我想说这种方法优于在 @H_971_5@main.o 中使用符号表的替代方法,这是我目前能想到的唯一替代方法。)

目前的问题是我似乎无法让 @H_971_5@make 从我链接在一起的目标文件列表中实际过滤掉 @H_971_5@main.o,见下文。


我正在谈论的承诺演示:

@H_971_5@mAIN_PROG_OBJ_DIR ::= build/test/release/main-prog-obj
# In the actual Makefile,this is generated as usual
MAIN_PROG_OBJs ::= build/test/release/main-prog-obj/state.o build/test/release/main-prog-obj/main.o build/test/release/main-prog-obj/util.o build/test/release/main-prog-obj/process_args.o

MAIN_O ::= $(MAIN_PROG_OBJ_DIR)"/main.o"
OBJs_FOR_BUILD ::= $(filter-out $(MAIN_O),$(MAIN_PROG_OBJs))

.PHONY: test
test:
        @echo should be removed [$(MAIN_O)]
        @echo OBJs_FOR_BUILD [$(OBJs_FOR_BUILD)]

我的系统上,使用 @H_971_5@make -f testmk test 运行它会产生:

should be removed [build/test/release/main-prog-obj/main.o]
OBJs_FOR_BUILD [build/test/release/main-prog-obj/state.o build/test/release/main-prog-obj/main.o build/test/release/main-prog-obj/util.o build/test/release/main-prog-obj/process_args.o]

显然我误解了 $(filter-out 的作用/它的语法是什么,那么我该如何完成我想要做的事情?

谢谢!

解决方法

这是一个引用问题,@H_971_5@make 按字面解释 "main.o",因此不会从列表中过滤掉 @H_971_5@main.o。混乱来自这样一个事实:当我回显 "main.o" 时,sHell 解析引号并将 @H_971_5@main.o 传递给内置的 echo。

大佬总结

以上是大佬教程为你收集整理的Makefile 过滤掉只是...不起作用?全部内容,希望文章能够帮你解决Makefile 过滤掉只是...不起作用?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。