【发布时间】: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设置编译器时,这个属性会被忽略。
还有其他方法可以做到这一点吗?一些推荐的方式?或者至少是一种解决方法?
【问题讨论】: