【问题标题】:Recommended ways to use CMake with icc via configuration options?通过配置选项将 CMake 与 icc 一起使用的推荐方法?
【发布时间】:2012-02-03 13:15:50
【问题描述】:

我想在基于 CMake 的项目中使用英特尔编译器 icc(或 icpc)(在 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设置编译器时,这个属性会被忽略。

还有其他方法可以做到这一点吗?一些推荐的方式?或者至少是一种解决方法?

【问题讨论】:

标签: build cmake icc


【解决方案1】:

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

Linux 用户

cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DCMAKE_Fortran_COMPILER=ifort ..

Windows 用户

从英特尔编译器控制台:

cmake -G "NMake Makefiles" -DCMAKE_C_COMPILER=icl -DCMAKE_CXX_COMPILER=icl -DCMAKE_Fortran_COMPILER=ifort ..

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 是的,CMake 喜欢将编译器视为不变量。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-15
      • 2019-04-11
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 2019-10-20
      相关资源
      最近更新 更多