生成文件中的条件变量

Conditional variables in a makefile

本文关键字:条件 变量 文件      更新时间:2023-10-16

我正在尝试使用makefile来允许在我的代码中使用不同类型的并行性。过去,我只会使用完全不同的代码制作文件/版本,但我正在尝试稍微加强我的游戏。

首先,我想制作一个串行和 OpenMP 版本。如果我正在构建 OpenMP 版本,我想使用-DUSEOMP标志,但在这种情况下无法重新定义DEFS变量。这是我现在的制作文件:

# the c++ compiler we are using
CXX = g++ 
# the executable file to be created
EXE = disrecon.exe
# the c++ flags we use for compilation
CXXFLAGS = -Wall
# #defines to the program
DEFS = 
# the object files
OBJS = 
serial: $(OBJS) xdriver.cpp
  @echo "Making serial version"
  $(CXX) $(CXXFLAGS) -o $(EXE) xdriver.cpp $(OBJS) $(DEFS)
omp: $(OBJS) xdriver.cpp
  @echo "Making OpenMP version"
  DEFS += -DUSEOMP
  $(CXX) $(CXXFLAGS) -o $(EXE) xdriver.cpp $(OBJS) $(DEFS)

clean:
  rm -rf *.o

默认情况下,这应该制作串行版本,但如果我指定make omp,则制作omp版本。现在,我无法重新定义(或添加到)DEFS变量。稍后我需要为其他包含的库等执行此操作,那么如何添加到像这样的特定部分中的变量列表中呢?

我首先尝试了 shell 变量方法,但 Make 特定于目标的变量应该是最好的方法。您可以添加以下行

omp: DEFS += -DUSEOMP

到你的生成文件,它应该看起来像

# the c++ compiler we are using
CXX = g++ 
# the executable file to be created
EXE = disrecon.exe
# the c++ flags we use for compilation
CXXFLAGS = -Wall
# #defines to the program
DEFS = 
# the object files
OBJS = 
serial: $(OBJS) xdriver.cpp
  @echo "Making serial version"
  $(CXX) $(CXXFLAGS) -o $(EXE) xdriver.cpp $(OBJS) $(DEFS)
omp: DEFS += -DUSEOMP
omp: $(OBJS) xdriver.cpp
  @echo "Making OpenMP version"
  $(CXX) $(CXXFLAGS) -o $(EXE) xdriver.cpp $(OBJS) $(DEFS)

clean:
  rm -rf *.o