我的代码包含各种可以通过宏启用或禁用的部分。 这可以通过代码中的#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中尝试了不同的方法,但没有发现任何有用的方法。 这样的事情可能吗?
答案 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
,否则你将以不同的方式获得对象的混搭。如果您认为您通常希望以不同的方式构建和共存,那么通常您会选择根据类型将目标文件放在不同的子目录中。然后他们不会互相干扰。