安装依赖
# clang 默认不支持 -fopenmp,因为它没有内置 OpenMP 支持。
# 为了解决这个问题,需要安装 libomp 并配置 clang 使用 libomp
brew install libomp# macOS 自带的 clang 编译器被修改过,默认禁用了 OpenMP,
# 而不支持 -fopenmp 选项,因此无法直接进行多线程并行化编译。
# 安装 LLVM 后,可以获得一个完整的、支持 OpenMP 的 clang 编译器版本。
brew install llvm
配置
我的终端是 zsh,如果你的终端是 bash,你就要写进 ~/.bashrc
echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.zshrc
echo 'export cc="/opt/homebrew/opt/llvm/bin/clang"' >> ~/.zshrc
echo 'export cxx="/opt/homebrew/opt/llvm/bin/clang++"' >> ~/.zshrc
echo 'export LDFLAGS="-L/opt/homebrew/opt/llvm/lib"' >> ~/.zshrc
echo 'export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"' >> ~/.zshrcsource ~/.zshrc
CMakeLists.txt
我用 cmake 的 find_package(OpenMP REQUIRED)
会有问题:
因此我直接手动指定相关的编译编译、链接路径、头文件路径了。
cmake_minimum_required(VERSION 3.28)
project(openmp_learn)set(CMAKE_CXX_STANDARD 17)include_directories(/opt/homebrew/opt/libomp/include)add_executable(openmp_learn main.cpp)
target_compile_options(openmp_learn PRIVATE -Xpreprocessor -fopenmp)
target_link_libraries(openmp_learn PRIVATE /opt/homebrew/opt/libomp/lib/libomp.dylib)
参考
- missing: OpenMP_C_FLAGS OpenMP_C_LIB_NAMES