根据自定义标志集

时间:2016-11-26 21:41:51

标签: cmake

我想在应用程序中添加对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似乎会设置编译器。我应该移动我的部分吗?看起来不那么漂亮。

1 个答案:

答案 0 :(得分:1)

  1. 您可以在project来电之前移动代码。我怀疑project电话前的代码看起来很糟糕。建议先放置cmake_minimum_required,然后放置project

  2. 如果您不喜欢第一种方式,请使用语言project拨打NONE(将其留空意味着C和C ++),然后是您的代码,最后enable_language(C)

  3. 实际上,在你的情况下,你应该反过来考虑:根据找到的C编译器,你寻找MKL并启用它。对于CMake而言,C编译器至关重要,不要玩它,但要颠倒你的逻辑。我知道,有时,这些参数无效,具体取决于项目。

  4. https://cmake.org/cmake/help/v3.7/command/project.html