GNU手册指出,eval函数扩展了参数,然后将展开的结果提供给解析器。以下引用GNU制作手册。
The argument to the eval function is expanded, then the results of that expansion are parsed as makefile syntax.
我不太明白make解析器是如何处理由eval提供的文本的,所以我编写了下面的makefile来进行测试。
define myprint
echo "this is a line"
endef
goal:
$(eval $(call mypri
我需要使用不同目录中的源文件创建一个静态库。我能够通过指定Makefile中的每个源文件来创建静态库。它增加了Makefile中的更多内容。让我解释一下我用一个例子做了什么:
#Specifying the each and every source files to FILES is more complex to me. Trying to find out alternative to this problem
Files = Source1\A.c Source\B.c Source2\C.c Source3\D.c ........... Sorce3/Z.c
$(OUT_FIL
在(GNU)中,当额外的makefile不存在时,我如何在(主)makefile的开头包含额外的makefile(这可能预先设置一些变量),而没有中断错误消息?
我试过在makefile顶部
include *.make
为了覆盖默认值,如
main ?= main.md
DEPS ?= template.tpl
但是,我确实得到了错误:
Makefile:4: *.make: No such file or directory
可能是因为在makefile开始时只允许定义,而不是命令。
我有以下Makefile:
MYVAR = 10
target:
for i in $(seq 0 $MYVAR)
do
echo "test" . $i
done
基本上我想得到的是..。
test 1
test 2
...
test n
当我试图运行它时,我得到:
用于语法错误:文件的意外结束
正确的魔法是什么?
在Makefile中,当我将bash变量分配给Makefile文件时,它不工作,空字符串被赋值。在下面的代码中,变量LINE和变量y为空。
SHELL = bash
target:
while read -r CURRENT_LINE; do \
echo "$$CURRENT_LINE" ; \ ##WORKING FINE, display line by line
LINE=$(shell echo "$$CURRENT_LINE") ; \ ##NOT WORKING
APPS = a b c
a_OBJ = x.o y.o z.o
b_OBJ = p.o q.o r.o
c_OBJ = s.o t.o k.o
all:
for i in $(APPS); \
do
echo $("$${i}_OBJ"); \
done;
在上面给定的示例Makefile中,我希望在for循环中打印obj文件列表,但是列表没有像预期的那样展开,在这里,为了正确地展开OBJ列表,我到底遗漏了什么。
考虑以下GNU makefile片段:
# this code is not under my control
A = aaa
B = bbb
# this code is under my control
A += $B
B = ccc
# Prints "aaa ccc". I would rather "aaa bbb".
$(info $A)
问题是,由于A最初是作为延迟变量创建的,因此+=的RHS值被视为递延值。有像A += $(immediate B)这样的东西我可以用吗?
以下几点在某种程度上达到了目的:
TMP := $B
A += $TM
我想复制一堆Verilog/systemverilog源代码,所以我在通配符表达式中使用CP:
cp <some_dir>/*.{v,sv,svh} .
它起作用了。但是,当我将它放在完全相同行的脚本中时,CP命令在日志中失败:
cp: cannot stat `../../mytest/spiTest/*.{v,sv,svh}': No such file or directory
这是怎么回事?
PS:我用bash作为外壳。
这是我的剧本:
#!/bin/bash
rdir=../../mytest/spiTest
f1="$rdir/bench.lst