Я хотел бы использовать компилятор 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
это свойство игнорируется.
Есть ли другой способ сделать это ?.Какой-то рекомендуемый способ?Или хотя бы обходной путь?