制作多个目标模式

  • 本文关键字:目标 模式 makefile
  • 更新时间 :
  • 英文 :


尝试运行我的makefile时(https://pastebin.com/CYqsYtj9),我遇到一个错误:

C:/STM32_Projects/blink_project/test/cpputest/build/MakefileWorker.mk:485: *** multiple target patterns.  Stop.

我还要链接MakefileWorker.mk(https://pastebin.com/5JSy3HsB),尽管我很确定它写得很好,因为它来自https://github.com/cpputest/

所以,问题是:为什么我会出现这个错误?

编辑:当我试图从Cygwin CLI生成makefile时,我得到的错误如下:

C://STM32_Projects/blink_project//test/cpputest/build/MakefileWorker.mk:485: *** target pattern contains no '%'.  Stop.

编辑2(最小、可验证的示例(:

// test/main.cpp
#include "CppUTest/CommandLineTestRunner.h"
int main (int ac, char ** av){
return CommandLineTestRunner::RunAllTests(ac,av);
}

所以这是一个简单的main.cpp,我的makefile应该编译它,除此之外,你还需要一个来自https://github.com/cpputest/cpputest按照该repo中的README所示进行编译。

如前所述,我不是Windows方面的专家,对cygwin的了解更少。

但是,我怀疑您尝试使用的环境在Windows上没有得到很好的支持或测试。我看到的是:

您设置:

PROJECT_DIR=C:/STM32_Projects/blink_project
TEST_DIR=$(PROJECT_DIR)/test
TEST_SRC_DIRS=$(TEST_DIR)

这意味着CCD_ 1被设置为CCD_。

接下来在MakefileWorker.mk中,您会得到一个错误,因为TEST_DEPS被设置为objs/C:/STM32_Projects/blink_project/test/main.o ...,我希望我们都能很容易地看到,这是一个完全伪造的路径。

那么我们是如何走上这条路的呢?让我们回顾一下:

在第484行,我们看到TEST_DEPS是如何设置的:

TEST_DEPS = $(TEST_OBJS) $(MOCKS_OBJS) ...

因此,伪路径很可能在TEST_OBJS中。设置在第380行:

TEST_OBJS = $(call src_to_o,$(TEST_SRC))

首先,什么是TEST_SRC?它在第379行被设置为用户定义宏get_src_from_dir_listTEST_SRC_DIRS(您在上面设置(的结果。该宏将定位所有源文件,以便在TEST_SRC_DIRS3的每个目录中查找与*.cpp*.cc*.c匹配的文件。因此,根据info的输出,我们可以推断这将返回:

C:/STM32_Projects/blink_project/test/main.cpp

这是意料之中的。然后我们将其传递给src_to_o,它是第363行上的用户定义宏,它使用第362行上定义的另一个用户定义宏src_to

src_to = $(addprefix $(CPPUTEST_OBJS_DIR)/,$(call __src_to,$1,$2))

哦!!在第226行,CPPUTEST_OBJS_DIR被设置为obj,所以这很可能是我们问题的开始。

在POSIX文件系统中,其中不存在诸如";驱动器号";,路径是完全可构造的:如果你有一个完全限定的路径,你可以通过添加一个新路径作为前缀来创建另一个路径。这在Windows上不起作用,因为Windows必须始终将驱动器号放在第一位。

但让我们继续前进。所以我们看到obj/前缀来自哪里,现在路径的其余部分来自哪里?这是在第361行定义的用户定义宏C:/STM32_Projects/blink_project/test0的扩展,从上面的源路径开始。这是干什么的?它想用.o替换.cpp扩展。但请注意:

$(if $(CPPUTEST_USE_VPATH),$(notdir $2),$2)

如果CPPUTEST_USE_VPATH为真,则返回路径的notdir;这将去掉所有的驱动器和目录信息,只返回main.cpp,它将变成main.o,然后结果将是obj/main.o,它将正常工作。

但是,如果CPPUTEST_USE_VPATH为false(默认情况下为false(,我们不会去掉路径,并且obj会被添加到带有驱动器规范的完整路径中,您会得到语法错误。

所以。基本上,cpbutest生成文件在Windows上存在问题。看起来你有一个这样的选择:

CPPUTEST_USE_VPATH选项设置为Y以启用它(并阅读该选项的含义以及如何在cpbutest文档中使用它(,

或者,在makefile中从路径中删除驱动器规格,然后只使用:

PROJECT_DIR = /STM32_Projects/blink_project

这意味着在调用之前,您需要小心您当前的驱动器是C:,否则它将找不到东西。

啊!

相关内容

  • 没有找到相关文章

最新更新