使用 make 提供多个 test#.txt 文件。有些文件需要参数。 C++/VSCode/Ubuntu

问题描述 投票:0回答:1

我是计算机科学专业的学生。我来这里不是为了让任何人为我做作业,只是为了寻求如何完善它的建议,因为我的项目已经完成了。它已经完成了,所以我需要一些时间来看看还有什么可能的。我问的这件事不是作业的必填部分。

它是一个词法分析器和解析器,旨在实现构建语言的编译器的最终目标。对于链接项目的本次迭代,必须向其提供 30 个 .txt 文件,如下所示:

./编译< test/test1.txt

我在 make 文件中添加了一个配方“测试”,它会迭代适用文件的列表并将它们提供给分析器。

一些被测试的函数需要参数,如下所示:

./编译< test/test11.txt 10.5 8

到目前为止,我所做的是将每个文件作为变量列出在文件顶部,作为 TESTING_P3 的一部分:

TESTING_P3 := 测试/test1.txt
测试/test11.txt 10.5 8
... ... 等等

我的问题是,是否存在一种方法可以检测文件何时应将参数传递给它,并在继续之前将这些参数提供给函数?有些需要一个、两个或三个不同类型的参数(字符、实数、整数)。要么是我的 google 技能不强,要么没有人这样做过,也许是因为它不应该在 make 文件中完成。如果是这样的话,也许我就因为这个原因陷入了死胡同。

makefile 中的这段代码--

测试:编译 对于 $(TESTING_P3) 中的文件;做
打印“ 运行测试文件 %s " "$$文件";
./编译< "$$file";
完成

  • 非常适合深入研究,但当然,当我尝试将参数编织到进程中时,这些测试会导致程序出现“缺少参数”错误。

我尝试过的所有其他内容(以 test11 为例)都将 10.5 和 8 视为下一个要打开的文件,这当然会导致“不存在此类文件”错误。至少它不会停止检查其余的测试文件。感谢您的宝贵时间。

cmake makefile arguments recipe
1个回答
0
投票

据我所知,您似乎正在寻找某种二维数组(列表类型的列表)。

不存在此类功能。

执行此操作的一种简单方法是通过添加分隔符将命令和参数组合成一个单词,然后在运行命令时再次将其删除。这是一个例子:

TESTING_P3 := test/test1.txt \
              test/test11.txt-10.5-8

test: $(TESTING_P3)

$(TESTING_P3): compile
         @printf "\nRunning test file\n%s\n" '$(subst -, ,$@)'
         ./$< $(wordlist 2,100,$(subst -, ,$@)) < '$(word 1,$(subst -, ,$@))'

有关更多详细信息,请参阅 GNU Make 手动讨论文本函数

© www.soinside.com 2019 - 2024. All rights reserved.