为什么$(<file.txt)在makefile上不起作用?

亚瑟·卡卡沃(Arthur Caccavo)

使用命令行我得到所需的输出

 $ ./program $(< file.txt)
 ./program 1 2 3 4 5

但是有一个makefile

all: program file.txt
    ./program $(< file.txt)
    @rm -f program
    
program: program.c
    gcc program.c -o program

我得到了输出

gcc program.c -o program
./program
安蒂·哈帕拉(Antti Haapala)

因为在makefile中,$(...)语法用于变量插值。因此,您的makefile尝试扩展名为的makefile变量/环境变量的值< file.txt如果未设置,它将扩展为空字符串。

证明:

all:
        echo $(< file.txt)

和file.txt包含

now it works

然后执行

% env '< file.txt=Hello world' make
echo Hello world
Hello world

即通过设置一个名为< file.txtvalue的环境变量Hello world ,问候语被打印出来。解决方法是$通过将字符加倍来转义该字符:

all:
        echo $$(< file.txt)

接着

% make
echo $(< file.txt)
now it works

QED

最后,虽然$()在POSIX插语法中,$(< file.txt)是不是,但你可以将其替换为$(cat file.txt)因此它具有微创符合POSIX的炮弹工作。当然,在makefile中,您再次需要将美元增加一倍,从而获得最大程度的兼容性

$$(cat file.txt)

或者,您可以使用类似的makefile工具$(shell ),即

 $(shell cat file.txt)

也会工作...(现在有一个$)。最后,您也可以使用$(file )GNU makefile函数读取文件,即

all:
        echo $(file <file.txt)

会类似地工作,但根本不会调用shell。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么sqlite3在Amazon Elastic File System上不起作用?

为什么Cat 0> file不起作用

为什么data-ng-file-select不起作用?

$ _file在PHP中为什么不起作用?

为什么命令“ ls | file”不起作用?

为什么file.delete()不起作用?

Makefile:为什么带有%的makefile不起作用?

为什么'ipconfig'在Windows 7上不起作用

为什么SETUID在Raspberry Pi上不起作用?

为什么模糊和聚焦在Safari上不起作用?

为什么WebHook的WebApi配置在POST上不起作用?

为什么Empty()在stdClass上不起作用

为什么FieldDoesNotExist在POST.get()上不起作用?

为什么 matplotlib 在 VSCode 上不起作用

为什么“加载事件在addEventListener()上不起作用”?

为什么push在此cookie数组上不起作用?

为什么.isascii()在Google colab上不起作用?

为什么.isascii()在Google colab上不起作用?

为什么HTMLunit在此https网页上不起作用?

为什么ProxyServer在chromedp GO上不起作用

为什么 saveStateInstance 在屏幕方向上不起作用?

为什么此switch语句在Angular上不起作用?

为什么对象分解在风格上不起作用?

为什么.htaccess在实时站点上不起作用?

为什么getExternalFilesDirs()在某些设备上不起作用?

为什么我的position:sticky在iOS上不起作用?

为什么ScrollTop位置在移动Safari上不起作用?

为什么width属性在我的桌子上不起作用?

为什么我的循环在GoogleSheets上不起作用?