生成文件中的条件变量
Conditional variables in a makefile
我正在尝试使用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
相关文章:
- 基于模板值的条件变量
- 没有超时的C++条件变量
- 在条件变量中触发错误信号的频率是多少
- 在通知提升间处理条件变量时未按住锁会导致问题
- 通知条件变量后使用互斥锁
- 滥用条件变量
- 升压插值条件变量可以虚假唤醒吗?
- 子线程中的条件变量等待停止主线程中的执行
- 条件变量基本示例
- 正在连接的等待条件变量的线程会发生什么情况?
- C++11如何在1个线程中使用条件变量处理2个线程安全队列
- 当线程处理不同的类时,应该在哪里声明条件变量、互斥对象
- 为什么在同一条件变量上使用多个互斥锁会使此代码崩溃?
- 条件变量:wait_for.gcc错误
- 如何"stop"正在等待条件变量的分离线程?
- 如何杀死被条件变量锁定的线程?
- 使用互斥锁和条件变量作为成员时如何修复"use of deleted function"?
- C++ 多个使用者线程卡在条件变量上
- POSIX 条件变量和互斥体"竞争"
- 将cpp_redis pub/sub与条件变量一起使用时出现问题