gpt4 book ai didi

sed - 使用 sed 改变 Makefile 变量

转载 作者:行者123 更新时间:2023-12-01 22:20:28 25 4
gpt4 key购买 nike

我正在尝试使用 sed 更改 Makefile 变量。我写了一个小的 Makefile 来说明我想做什么。 CINCS 变量最终将附加到 CFLAGS 变量。 CSINCS 变量应该保存所有包含文件的路径,前面没有“-I”。

#
SHELL = /bin/sh

SRCS = /usr/local/src/jpeg/jpeg-9b
CINCS = -I/usr/local/src/jpeg/jpeg-9b
CSINCS = $(CINCS) | sed -e "s/-I//g"

check:
@echo 1. $(SRCS)
find $(SRCS) -name "*.c" -print > cscope.files
@echo 2. $(CSINCS)
find '$(CSINCS) -name" "*.h' -print >> cscope.files
cscope -k -b
cat cscope.files | xargs ctags -u
#

我正在尝试删除所有包含路径前面的“-I”。执行时:

$ make -f test check
1. /usr/local/src/jpeg/jpeg-9b
find /usr/local/src/jpeg/jpeg-9b -name "*.c" -print > cscope.files
2. /usr/local/src/jpeg/jpeg-9b
find '-I/usr/local/src/jpeg/jpeg-9b | sed -e "s/-I//g" -name" "*.h' -print >> cscope.files
find: unknown predicate `-I/usr/local/src/jpeg/jpeg-9b | sed -e "s/-I//g" -name" "*.h'
test:8: recipe for target 'check' failed
make: *** [check] Error 1

在位置“2”处,CSINCS 变量看起来是正确的。但是用“查找命令”进行扩展。这就是问题所在。

我知道我可以在 cscope 命令中使用 CINCS 变量:

cscope -I $(CINCS)

但我也想为 ctags 文件使用 cscope.files。我可以只生成一个单独的 CSINCS 变量并始终保持 CINCS 和 CSINCS 同步。只是好奇发生了什么。

最佳答案

你还没有告诉 make 将 CSINCS 的值作为 shell 脚本来执行,你需要像

CSINCS := $(shell echo $(CINCS) | sed -e "s/-I//g")

或者如果你有 make 4.0 或者更新

CSINCS != echo $(CINCS) | sed -e "s/-I//g"

尽管对于这么简单的事情您不需要使用 sed 或 shell

CSINCS := $(subst -I,,$(CINCS))

关于sed - 使用 sed 改变 Makefile 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40479175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com