如何在CLion中设置基本的openMP项目

15

我正在尝试在 CLion IDE 中运行简单的 OpenMP 程序。但是当我运行时出现了一个错误:

CMakeFiles\openmp_test_clion.dir/objects.a(main.cpp.obj): In function `main':
D:/.../openmp_test_clion/main.cpp:9: undefined reference to 'omp_get_thread_num'
collect2.exe: error: ld returned 1 exit status

这是我的代码:

#include <stdio.h>
#include <omp.h>

int main()
{
    int id;
#pragma omp parallel private(id)
    {
        id = omp_get_thread_num();
        printf("%d: Hello World!\n", id);
    }
    return 0;
}

这是我的CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.6)
project(openmp_test_clion)

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

set(SOURCE_FILES main.cpp)
add_executable(openmp_test_clion ${SOURCE_FILES})

message(STATUS "Checking OpenMP")
find_package(OpenMP)
IF(OPENMP_FOUND)
    message("Found OpenMP!)
    # add flags for OpenMP
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${OpenMP_SHARED_LINKER_FLAGS}")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
ELSE()
    message("Missed OpenMP!")
ENDIF()

这是我的工具链屏幕截图: 输入图像描述

我对OpenMP没有任何经验,我是一个C++初学者,请给我一点设置项目的解释。

1个回答

25

所以过了一会儿,我想通了。我将CmakeLists.txt更改为以下内容:

cmake_minimum_required(VERSION 3.6)
project(openmp_test_clion)

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

set(SOURCE_FILES main.cpp)
add_executable(openmp_test_clion ${SOURCE_FILES})

我需要通过 TDM-GCC安装程序 安装openmp。


1
这个答案展示了一个更好的设置,支持多个编译器,而不是硬编码gcc标志。 - tera
不幸的是,这对我没有起作用。这是唯一在Mac OS上使用CLion为我工作的答案:https://dev59.com/a5Hea4cB1Zd3GeqPvutr - Shane Sepac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接