我想将英特尔编译器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此属性设置编译器时将被忽略.
还有另一种方法吗?一些推荐的方式?或者至少是解决方案?