在make目标中设置C宏?

时间:2013-09-11 13:46:27

标签: macros makefile

我的代码包含各种可以通过宏启用或禁用的部分。 这可以通过代码中的#ifdef /#endif,使用makefile中的-D选项以及通过设置宏调用make来完成。例如:

make DOMP=-DUSE_OMP

在makefile中

calco.o: calco.cpp calco.h
    $(CC) calco.cpp -o calco.o $(DOMP)
代码中的

#ifdef USE_OMP
#pragma omp parallel for
#endif
    for (i =0; i < N; i++) {
       ...
    }

我有很多可以设置的宏,并且希望能够通过制作不同的目标来设置这些宏。例如

make calc_abc

将使用一组特定的宏构建我的应用程序,而

make calc_xyz

会使用一组不同的宏来执行此操作。

我在makefile中尝试了不同的方法,但没有发现任何有用的方法。 这样的事情可能吗?

1 个答案:

答案 0 :(得分:4)

您可以为此使用特定于目标的变量。特定于目标的变量的一个特征是它们是由它们的先决条件继承的。所以:

calc_abc : CPPFLAGS += -DUSE_ABC
calc_xyz : CPPFLAGS += -DUSE_XYZ

calc_abc : calc
calc_xyz : calc

calc: foo.o bar.o

当然,这里的诀窍是你必须确保在这些不同类型的构建之间运行make clean,否则你将以不同的方式获得对象的混搭。如果您认为您通常希望以不同的方式构建和共存,那么通常您会选择根据类型将目标文件放在不同的子目录中。然后他们不会互相干扰。