Passing parameters to make to change #define variable
本问题已经有最佳答案,请猛点这里访问。
我想通过makefile多次编译C代码,将不同的参数传递给define变量。我应该把手放在哪里?
在我的C代码中,我有一个矩阵维到的大小定义。
1 | #define N 500 |
我想在一个循环中多次编译它,但是我无法理解如何通过
1 | -DN=(different sizes) |
在makefile中。
工作结构如下:1。使清洁2。制造时-dn=一定尺寸三。运行性能测试并获取结果4。以不同尺寸重复。
我的生成文件现在如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | exe_name = exe CC = gcc CFLAGS = -g -O2 -ggdb LDFLAGS = -lm -L. -Wall -Wextra OMPFLAGS = -fopenmp OBJS = ompmatmul.o default: $(exe_name) $(exe_name): $(OBJS) $(CC) -o $@ $^ $(LDFLAGS) $(OMPFLAGS) %.o: %.c $(CC) -c $< -o $@ $(CFLAGS) $(OMPFLAGS) clean: rm -f $(OBJS) $(exe_name) *~ .PHONY: clean #Don't look for a file named 'clean' |
我要插入make的循环如下:
1 2 3 4 5 6 | for size in $(seq 500 500 3000); do make clean make #define_new_size #do_performance_and_acquire_results done |
要将参数传递到make文件,请按如下方式添加参数:
1 | make N=500 |
那么您的makefile将包含:
1 2 3 4 5 6 7 8 9 | ifndef N # provide a default N=500 endif ... $(exe_name): $(OBJS) $(CC) -DN=$(N) -o $@ $^ $(LDFLAGS) $(OMPFLAGS) |
为了自动化测试,基于dbush提出的优秀解决方案,可以将以下内容添加到makefile中:
1 2 3 4 5 6 7 8 9 10 11 | SEQS := $(shell seq 500 500 3000) TSTS := $(addprefix test-,$(SEQS)) .PHONY: tests $(TSTS) tests: $(TSTS) test-%: $(MAKE) clean $(MAKE) $(exe_name) N=$* $(MAKE) performance-test |