【发布时间】:2016-07-23 16:46:57
【问题描述】:
如果我有 3 个文件,function.h、function.c 和 my_program.c,它们都在同一个目录中调用 function.h 中的一个方法,那么编写 makefile 的最佳方法是什么,以便我最终得到当我输入 lli my_program.bc 时实际运行的 my_program.bc? (我需要运行一个用户定义的通行证,将东西插入到函数中 - 我应该在 function.bc 和 test.bc 上运行通行证,还是应该在运行通行证之前进行链接?)
我试过 llvm-link function.bc my_program.bc 没有运气。我觉得我要么错过了一些简单的事情,要么把整个事情都搞错了。
当前可怕的不工作的makefile:
.PHONY: all clean
CC = clang
CFLAGS = -std=gnu99 -D_POSIX_C_SOURCE=200809L -g -Wall
IRFLAGS = -O3 -emit-llvm
TARGET = test
DEPS = functions.h
all: $(TARGET)
bc: test2
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
%.bc: %.c $(DEPS)
$(CC) $(IRFLAGS) -c -o $@ $<
test2: test.bc functions.bc
llvm-link -o test2.bc $< functions.bc
test: test.o functions.o
$(CC) $(CFLAGS) -o $@ $^
clean:
$(RM) $(TARGET) *.o *.bc
【问题讨论】:
-
没有真正回答你的问题,但是你试过让clang直接运行pass吗?
-
是的,通行证可以运行,测试可执行文件也可以运行。我的问题是链接并使原始程序以 bc 格式运行。
标签: makefile llvm llvm-clang llvm-ir