传递参数以更改#define变量[重复]
Posted
技术标签:
【中文标题】传递参数以更改#define变量[重复]【英文标题】:Passing parameters to make to change #define variable [duplicate] 【发布时间】:2019-06-03 07:58:39 【问题描述】:我想通过将不同的参数传递给#define 变量,通过Makefile 多次编译C 代码。我应该把我的菜鸟手放在哪里?
在我的 C 代码中,我有一个矩阵尺寸的大小定义
#define N 500
我想在一个循环中多次编译它,但我不知道如何通过
-DN=(different sizes)
在 Makefile 中。
作业的结构如下: 1.打扫干净 2. 使用-DN=确定大小 3. 运行性能测试并获取结果 4. 以不同的尺寸重复。
我的 Makefile 现在看起来像这样:
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 的循环如下:
for size in $(seq 500 500 3000); do
make clean
make #define_new_size
#do_performance_and_acquire_results
done
【问题讨论】:
也许我不清楚,对此感到抱歉:我想知道我是否可以通过使用 N=500 的 Makefile 来更改(尤其是如何)#define N 的大小, 1000,1500,..,3000 在我的 bash 作业的单次运行中,因此避免调整参数并为每个 N 重新编译。 somake size=$size
然后 gcc 命令采用 -DN=$(size)
【参考方案1】:
要自动化测试,基于dbush 提出的出色解决方案,您可以将以下内容添加到您的 Makefile:
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
【讨论】:
【参考方案2】:要将参数传递给 make 文件,请像这样添加参数:
make N=500
那么你的 makefile 将包含:
ifndef N
# provide a default
N=500
endif
...
$(exe_name): $(OBJS)
$(CC) -DN=$(N) -o $@ $^ $(LDFLAGS) $(OMPFLAGS)
【讨论】:
效果很好,非常感谢 :)以上是关于传递参数以更改#define变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章