我想在应用程序中添加对Intel Math Kernel Library的支持。对于MKL支持,我需要将C编译器更改为ICC。
我希望它只能设置一个标记-DMKL_ENABLE=ON
,将CMAKE_C_COMPILER
更改为icc
以及设置openMP和Lapack标记和库。所以我将这些行添加到CMakeList.txt:
# Enable MKL support?
OPTION(MKL_ENABLE "Enable Intel Mathematical Kernel Library (MKL) support" OFF)
IF(MKL_ENABLE)
SET(CMAKE_C_COMPILER "icc" CACHE INTERNAL "Set compiler to icc")
SET(LAPACK_ENABLE TRUE CACHE INTERNAL "Enable LAPACK libraries from MKL")
SET(LAPACK_LIBRARIES "-mkl" CACHE INTERNAL "Set LAPACK libraries to -mkl")
SET(OPENMP_ENABLE ON CACHE INTERNAL "Enable openmp support")
ENDIF(MKL_ENABLE)
似乎所有其他标志都已设置且实际有效,除了CMAKE_C_COMPILER
,它仍然是gcc
-- The C compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
任何想法如何解决?在定义project
时,CMake似乎会设置编译器。我应该移动我的部分吗?看起来不那么漂亮。
答案 0 :(得分:1)
您可以在project
来电之前移动代码。我怀疑project
电话前的代码看起来很糟糕。建议先放置cmake_minimum_required
,然后放置project
。
如果您不喜欢第一种方式,请使用语言project
拨打NONE
(将其留空意味着C和C ++),然后是您的代码,最后enable_language(C)
。
实际上,在你的情况下,你应该反过来考虑:根据找到的C编译器,你寻找MKL并启用它。对于CMake而言,C编译器至关重要,不要玩它,但要颠倒你的逻辑。我知道,有时,这些参数无效,具体取决于项目。