Я использую параллельные алгоритмы CMake и GNU и следующий фрагмент кода в моем CMakeLists.txt
:
if (OPENMP_FOUND)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif().
Делает ли это лишнюю следующую команду?
target_link_libraries(MyTarget OpenMP::OpenMP_CXX)?
У меня есть пытался найти ответ здесь , но безуспешно. После печати вывода вышеуказанных переменных с помощью команды message
я вижу, что последние две пустые.
-- OpenMP_CXX_FLAGS are: -fopenmp
-- OpenMP_C_FLAGS are: -Xclang -fopenmp
-- CMAKE_EXE_LINKER_FLAGS are:
-- OpenMP_EXE_LINKER_FLAGS are:
Я попытался найти определение переменной здесь , но не смог узнать больше. Небольшая тестовая программа, использующая:
__gnu_parallel::for_each
, работала параллельно независимо от того, включил ли я:
target_link_libraries(MyTarget OpenMP::OpenMP_CXX)
, что приводит меня к выводу, что в этом нет необходимости. Это правда?
Мой gcc
это g++-9 (Homebrew GCC 9.3.0_1) 9.3.0.
Спасибо!