关于C#:传递参数以更改#define变量

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