【发布时间】:2015-11-10 15:48:38
【问题描述】:
谁能帮我弄清楚为什么我不能在这里将不同版本的.ll 文件传递给LLVM_OPT? makefile 中是否有办法提取$(SRC) 中的每个basename 以传递给opt?
所以场景是编译*.c 和clang,然后将opt 和$(CCC_OPT) 应用于每个*.ll 以将它们转换为$file_Opt.ll。最后clang通过链接所有$file_Opt.ll生成后端a.out。
BENCHMARK = $(shell basename `pwd`)
SRC := $(wildcard *.c)
HEADERS := $(wildcard *.h)
# Actions
.PHONY: all clean vclean
all:
$(ZCC) $(HEADERS) $(INCPATHS) $(SRC)
$(foreach var,$(SRC), $(CC_OPTS) $(CCC_OPTS) -S -o $(var)_llvmOpt.ll $(var).ll;)
$(LCC) -v *_llvmOpt.ll -lm
clean:
rm -f a.out *.o *.a *.s *.i *.I
vclean:
rm -f a.out *.o *.a *.s *.i *.I *.ll
输出:
opt: loop-wrap.c.ll: error: Could not open input file: No such file or directory
make: *** [all] Error 1
【问题讨论】:
-
这怎么办?运行
make的输出是什么?$(CC_OPTS)是什么?$(CCC_OPTS)是什么?$(CC_OPTS)是否包含要运行的实际命令? -
抱歉问题不完整。我正在更新它。问题是,我应该从每个
file.c中提取file部分,然后将其传递给opt -
是的,所以,您确实意识到您原来的问题中没有任何地方,对吧?甚至没有在更新的问题中明确提出,对吧?
-
好吧,这个问题仍然有效。如何在 makefile 中定义某些循环。现在我需要在
action部分之前定义另一个,但是如何... -
您对
$(foreach)的使用完全正确。你没有提到任何关于另一个循环的事情。你还没有尝试过。您没有提供失败或错误或任何关于您的其他循环如何不工作的信息。所以这也不是你问的问题的一部分。
标签: loops makefile llvm llvm-clang