我有一个Makefile,其中有一个文本文件和一定数量。我想比较该文本文件中的行数,以查看它是否等于或大于该数,但是使用wc bash命令没有成功。
我尝试在文本文件上使用wc,但是$(wc -l <filename.txt)始终为空,从而使ifeq($(wc -l <filename.txt),number))错误输出。我已经尝试过将bash语法用于if语句,但这也不起作用。
例如
Self
对所有这些变量(从TEST到TEST3)执行@echo $(值TEST)会导致输出为空。
我还尝试将文本文件中的行数放入另一个文本文件中(例如,linecount.txt中单行显示“ 30”)。然后,我尝试将文件内容存储到变量中,以便可以将其与数字进行比较,但这没有用,因为我无法在开头定义变量。
有什么建议吗?这可能吗,还是我必须单独编写脚本?如果可能的话,希望在Makefile中完成。
答案 0 :(得分:0)
首先,您应该指定需要GNU make的语法(您对ifeq
的引用是唯一的线索)。
回到您的实际问题,gmake本身没有wc
函数。您要尝试执行的是执行外部命令。您可以使用shell
函数来做到这一点:
TEST= $(shell wc -l < missing_test_line_count.txt)
在BSD中,通过!=
分配实现相同的功能:
TEST!= wc -l < missing_test_line_count.txt
答案 1 :(得分:0)
要将外壳作为GNUMakefile中变量扩展的一部分运行,您需要使用shell
函数:
TEST:=$(shell wc -l < missing_test_line_count.txt)
在Makefile中读取此行时,将运行有问题的命令,并将TEST
设置为结果。您也可以使用
TEST=$(shell wc -l < missing_test_line_count.txt)
它将在每次扩展$(TEST)
变量时运行命令。
请注意,此功能(和一般功能)是GNUMake扩展。普通品牌不支持这样做。