Recommended ways to use CMake with icc via configu

2019-05-08 04:00发布

I would like to use the Intel compiler icc (or icpc) with a CMake-based project (on Linux for what it's worth). I can of course export the CXX variable when calling cmake, e.g. like

CXX=icpc cmake ../

and this works fine. I would however like to make this choice available via a custom option. For this I parse custom option, e.g.

cmake -DMY_COMPILER_OPTION=Intel ..

as

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 ()

and set CMAKE_CXX_COMPILER together with some compiler flags. This also works, however there is an important "but".

I would also like to use the option -ipo (interprocedural optimization) for my code when compiling with icc plus I need to compile a static library within the build process. For this to work, I need to use Intel's xiar (and also xilink I guess).

cmake actually offers a special property for this

set_property(TARGET mytarget PROPERTY INTERPROCEDURAL_OPTIMIZATION 1)

however this only seems to works properly when the compiler has been set via the environment variable (then xiar is used). When setting the compiler via CMAKE_CXX_COMPILERthis property is ignored.

Is there another way to do this?. Some recommended way? Or at least a work-around?

标签: build cmake icc
3条回答
做个烂人
2楼-- · 2019-05-08 04:27

Ok, since there have been no answers here, I've also turned to the CMake mailing list list for help on this issue. The consent of the experts there seems to be that the way I was trying to do this is a rather bad idea. The reason is that the parsing of my custom flags happens to late in the initialization process. One should therefore rely on setting the compiler via environment variables and let CMake do its magic during the initial configuration run. I will modify my approach..

查看更多
别忘想泡老子
3楼-- · 2019-05-08 04:29

Basically, avoid trying to change the compiler. See the FAQ: How do I use a different compiler?. CMake Toolchain files provide a way to support some complex cases, like an exotic HPC compiler.

查看更多
迷人小祖宗
4楼-- · 2019-05-08 04:32

A quick answer for convenience, make an INTEL build from the source directory:

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

(remove whichever languages you don't need)

查看更多
登录 后发表回答