【问题标题】:set C macros in a make target?在 make 目标中设置 C 宏?
【发布时间】:2013-09-11 13:46:27
【问题描述】:

我的代码包含可以通过宏启用或禁用的各个部分。 这可以通过代码中的#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 中尝试了不同的方法,但没有发现任何有效的方法。 这样的事情有可能吗?

【问题讨论】:

    标签: macros makefile


    【解决方案1】:

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

    calc_abc : CPPFLAGS += -DUSE_ABC
    calc_xyz : CPPFLAGS += -DUSE_XYZ
    
    calc_abc : calc
    calc_xyz : calc
    
    calc: foo.o bar.o
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多