通过配置选项推荐使用CMake和icc的方法?

jan*_*048 4 build cmake icc

我想将英特尔编译器icc(或icpc)与基于CMake的项目一起使用(在Linux上用于它的价值).我当然可以在调用cmake时导出CXX变量,例如

CXX=icpc cmake ../
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,我想通过自定义选项提供此选择.为此,我解析自定义选项,例如

cmake -DMY_COMPILER_OPTION=Intel ..
Run Code Online (Sandbox Code Playgroud)

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 ()
Run Code Online (Sandbox Code Playgroud)

CMAKE_CXX_COMPILER与一些编译器标志一起设置.这也有效,但有一个重要的"但是".

我还想在使用-ipoicc编译时使用选项(过程间优化)代码,我需要在构建过程中编译静态库.要做到这一点,我需要使用英特尔xiar(xilink我也猜).

cmake实际上为此提供了一个特殊的属性

set_property(TARGET mytarget PROPERTY INTERPROCEDURAL_OPTIMIZATION 1)
Run Code Online (Sandbox Code Playgroud)

但是,当通过环境变量设置编译器(然后使用xiar)时,这似乎只能正常工作.通过CMAKE_CXX_COMPILER此属性设置编译器时将被忽略.

还有另一种方法吗?一些推荐的方式?或者至少是解决方案?

Mik*_*e T 6

推荐的方法是cmake使用适当的CMAKE_<LANG>_COMPILER定义运行。

Linux 用户

cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DCMAKE_Fortran_COMPILER=ifort ..
Run Code Online (Sandbox Code Playgroud)

Windows 用户

从英特尔编译器控制台:

cmake -G "NMake Makefiles" -DCMAKE_C_COMPILER=icl -DCMAKE_CXX_COMPILER=icl -DCMAKE_Fortran_COMPILER=ifort ..
Run Code Online (Sandbox Code Playgroud)


jan*_*048 5

好的,既然这里没有答案,我也转向CMake邮件列表列表寻求有关此问题的帮助.专家的同意似乎是我试图这样做的方式是一个相当糟糕的主意.原因是我的自定义标志的解析发生在初始化过程的后期.因此,应该依靠通过环境变量设置编译器,让CMake在初始配置运行期间发挥其魔力.我会修改我的方法..