Рекомендуемые способы использования CMake с ICC через параметры конфигурации? - PullRequest
4 голосов
/ 03 февраля 2012

Я хотел бы использовать компилятор Intel icc (или icpc) с проектом на основе CMake (в Linux, если он того стоит).Конечно, я могу экспортировать переменную CXX при вызове cmake, например, как

CXX=icpc cmake ../

, и это прекрасно работает.Однако я хотел бы сделать этот выбор доступным через пользовательский параметр.Для этого я анализирую пользовательскую опцию, например,

cmake -DMY_COMPILER_OPTION=Intel ..

как

IF (MY_COMPILER_OPTION STREQUAL "Intel")
  MESSAGE(STATUS "** Compiling with Intel settings **")
  SET(CMAKE_CXX_COMPILER "icpc")
  SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -w")
  SET(CMAKE_CXX_FLAGS_DEBUG "-g")
ENDIF ()

и устанавливаю CMAKE_CXX_COMPILER вместе с некоторыми флагами компилятора.Это также работает, однако есть важное «но».

Я также хотел бы использовать опцию -ipo (межпроцедурная оптимизация) для моего кода при компиляции с помощью icc, плюс мне нужно скомпилировать статическую библиотеку внутрипроцесс сборки.Чтобы это работало, мне нужно использовать Intel xiar (а также xilink, я думаю).

cmake на самом деле предлагает специальное свойство для этого

set_property(TARGET mytarget PROPERTY INTERPROCEDURAL_OPTIMIZATION 1)

, но это только кажетсяработать правильно, когда компилятор был установлен через переменную окружения (тогда используется xiar).При настройке компилятора через CMAKE_CXX_COMPILER это свойство игнорируется.

Есть ли другой способ сделать это ?.Какой-то рекомендуемый способ?Или хотя бы обходной путь?

Ответы [ 3 ]

5 голосов
/ 08 февраля 2012

Хорошо, поскольку здесь не было ответов, я также обратился к списку рассылки CMake за помощью в этом вопросе.Похоже, что согласие экспертов заключается в том, что способ, которым я пытался это сделать, является довольно плохой идеей.Причина в том, что анализ моих пользовательских флагов происходит слишком поздно в процессе инициализации.Поэтому следует полагаться на установку компилятора через переменные окружения и позволить CMake сделать свое волшебство во время первоначального запуска конфигурации.Я изменю свой подход ..

2 голосов
/ 27 февраля 2018

Быстрый ответ для удобства, создайте INTEL сборку из исходного каталога:

mkdir INTEL
cd INTEL
cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DCMAKE_Fortran_COMPILER=ifort ..

(удалите все ненужные языки)

1 голос
/ 20 мая 2013

По сути, избегайте попыток изменить компилятор. См. FAQ: Как использовать другой компилятор? . Файлы CMake Toolchain предоставляют способ поддержки некоторых сложных случаев, таких как экзотический компилятор HPC.

...