MacOS C++ OpenMP支持

在配置OpenMP的过程中,再一次体现了Mac相对于Linux而言,环境不是很友好。整个配置花了将近三个小时,非常不开心。

先说一下最终方案:

方案一:不用clang

如果不用MacOS 默认的Clang(Mac默认把gcc重定向到Clang),那么就需要安装GNU的compiler,其中默认支持openmp(libgomp.so)。我电脑里面真正的gcc在/usr/local/bin/gcc-9,在zsh里面,用alias把gcc命令重定向到这个地方来。

然后如果不用cmake,则万事大吉,编译的时候直接加-fopenmp就可以,非常简单。

如果用cmake,则需要设置

set(CMAKE_C_COMPILER "/usr/local/bin/gcc-9")

同样也可以在cmake cmd的时候加上-DCMAKE_C_COMPILER=/usr/local/bin/gcc-9。测试发现如果在cmakelist里面加,则vscode的cmake tools要build好久,电脑呼呼响。

同时手动加上compile-time flag

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3 -fopenmp")

然后还需要手动加上头文件地址

include_directories("/usr/local/Cellar/gcc/9.3.0_1/lib/gcc/9/gcc/x86_64-apple-darwin19/9.3.0/include/")

非常脏

方案二:用clang

OpenMP on High Sierra - 这个post讲得非常清楚了。(如果homebrew需要更新不了,直接把homebrew删了,即到安装路径下删除,到homebrew官网重新安装)

然后说一下没有结果的几个方案:

  1. 把真实gcc的位置放到环境变量CC与CXX里面,事实证明没有卵用,CMake根本不理;(好像重启电脑或者重启vscode,vscode会重读.zshrc里面的内容。)

附上gcc openmp的文档

Top (GNU libgomp)

附上判断当前cmake使用编译器的cmake命令

if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")

  MESSAGE("Clang")

elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")

  MESSAGE("GNU")

elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")

  MESSAGE("Intel")

elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")

  MESSAGE("MSVC")

endif()

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值