我的代码包含可以使用宏启用或禁用的各个部分。这可以通过代码中的#ifdef/#endif、makefile 中的-D 选项以及通过设置宏调用make 来完成。例子:
make DOMP=-DUSE_OMP
Run Code Online (Sandbox Code Playgroud)
在生成文件中
calco.o: calco.cpp calco.h
$(CC) calco.cpp -o calco.o $(DOMP)
Run Code Online (Sandbox Code Playgroud)
在代码中
#ifdef USE_OMP
#pragma omp parallel for
#endif
for (i =0; i < N; i++) {
...
}
Run Code Online (Sandbox Code Playgroud)
我有很多可以设置的可能的宏,并且希望能够通过制作不同的目标来设置这些宏。例如
make calc_abc
Run Code Online (Sandbox Code Playgroud)
将使用一组特定的宏构建我的应用程序,而
make calc_xyz
Run Code Online (Sandbox Code Playgroud)
将使用一组不同的宏来做到这一点。
我在我的 makefile 中尝试了不同的方法,但没有发现任何有效的方法。这样的事情可能吗?
您可以为此使用特定于目标的变量。特定于目标的变量的特征之一是它们由其先决条件继承。所以:
calc_abc : CPPFLAGS += -DUSE_ABC
calc_xyz : CPPFLAGS += -DUSE_XYZ
calc_abc : calc
calc_xyz : calc
calc: foo.o bar.o
Run Code Online (Sandbox Code Playgroud)
当然,这里的技巧是您必须确保make clean在这些不同类型的构建之间运行,否则您将获得以不同方式构建的对象的混杂。如果您认为您通常希望以不同的方式构建并共存,那么通常您会选择根据类型将目标文件放在不同的子目录中。那么他们就不会互相干扰了。