makefile 中的条件变量
Conditional variables in a makefile
我正在尝试使用 makefile 在我的代码中允许不同类型的并行性。过去我只会使用完全不同的 makefiles/versions 代码,但我正在努力提高我的水平。
首先,我想制作一个串行和 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
默认情况下,这应该制作串行版本,但如果我指定 make omp
,则制作 omp
版本。现在,我无法重新定义(或添加)到 DEFS
变量。稍后我将需要为其他包含的库等执行此操作,那么我该如何添加到特定部分的变量列表中呢?
我首先尝试了 shell 变量方法,但是生成 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
我正在尝试使用 makefile 在我的代码中允许不同类型的并行性。过去我只会使用完全不同的 makefiles/versions 代码,但我正在努力提高我的水平。
首先,我想制作一个串行和 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
默认情况下,这应该制作串行版本,但如果我指定 make omp
,则制作 omp
版本。现在,我无法重新定义(或添加)到 DEFS
变量。稍后我将需要为其他包含的库等执行此操作,那么我该如何添加到特定部分的变量列表中呢?
我首先尝试了 shell 变量方法,但是生成 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