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

时间:2012-02-03 13:15:50

标签: build cmake icc

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

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与一些编译器标志一起设置。这也有效,但有一个重要的“但是”。

我还想在使用icc编译时使用选项-ipo(过程间优化)代码我需要在构建过程中编译静态库。要实现这一点,我需要使用英特尔的xiar(我猜也是xilink)。

cmake实际上为此

提供了一个特殊属性
set_property(TARGET mytarget PROPERTY INTERPROCEDURAL_OPTIMIZATION 1)

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

还有其他办法吗?一些推荐的方式?或者至少是解决方法?

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

为方便起见,请快速回答一下,从源目录进行INTEL构建:

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

(删除您不需要的语言)

答案 2 :(得分:1)

基本上,避免尝试更改编译器。请参阅FAQ: How do I use a different compiler?。 CMake工具链文件提供了一种支持某些复杂情况的方法,如异国情调的HPC编译器。