CMake:如何强制CMake到静态链接openmp

CMake: How can I force cmake to static link openmp?

本文关键字:CMake 链接 openmp 静态 何强制      更新时间:2024-09-28

我知道使用cmake以跨平台方式链接openmp的方法

find_package(OpenMP REQUIRED)
link_libraries(OpenMP::OpenMP_CXX)

但我不知道如何强制cmake静态链接openmp,事实上,所有关于openmp库的cmake官方变量都是动态
无论如何,非跨平台的方法是:

clang++ -std=c++2a test.cpp -Iinclude -march=native -O3 -c          
clang++ test.o -o test.x /usr/local/lib/libomp.a -pthread  

或者如果您使用gcc

g++-10 -std=c++2a test.cpp -Iinclude -march=native -O3 -c 
g++-10 test.o -o test.x /usr/local/opt/gcc/lib/gcc/10/libgomp.a -pthread 

顺便问一下,这是cmake缺陷还是有其他方法可以实现

不是一个答案,但太多了,无法放入评论中。

我对OpenMP一无所知,除了cmake确实支持它:https://cmake.org/cmake/help/latest/module/FindOpenMP.html?highlight=openmp.

我没有看到任何文档提到静态/共享。也许你是对的,它只支持共享的libs。

通过询问官方话语进行双重检查:https://discourse.cmake.org/

您也可以尝试阅读官方的FindOpenMP-cmake模块,因为这都是开源的。

编辑:

如果你是正确的,cmake缺乏这个功能,考虑贡献并添加它:(