makefile中的条件变量

时间:2015-04-11 17:06:56

标签: c++ makefile

我正在尝试使用makefile在我的代码中允许不同类型的并行。在过去,我会使用完全不同的makefile /版本的代码,但我试图加强我的游戏。

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

# 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

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

1 个答案:

答案 0 :(得分:1)

我首先尝试了shell变量方法,但Make target-specific变量应该是最好的方法。 您可以添加以下行

omp: DEFS += -DUSEOMP

到你的Makefile,看起来应该是

# 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