2016-11-26 1 views
1

Ich möchte die Unterstützung von Intel Math Kernel Library zu einer Anwendung hinzufügen. Für MKL-Unterstützung muss ich den C-Compiler zu ICC ändern.Ändern Sie CMAKE_C_COMPILER abhängig von benutzerdefinierten Flag festgelegt

Ich möchte, dass nur in der Lage sein ein Flag -DMKL_ENABLE=ON eingesetzten CMAKE_C_COMPILER-icc auch zu ändern, wie OpenMP und Lapack Flaggen und Bibliotheken zu setzen. So füge ich diese Zeilen an den 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) 

Es scheint, dass alle anderen Flags gesetzt sind und tatsächlich funktionieren, außer CMAKE_C_COMPILER, die noch 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 

Irgendwelche Ideen wie man es beheben ? Es scheint CMake Setups Compiler, wenn project definiert ist. Soll ich meine Sektion hochziehen? Sieht nicht so hübsch aus.

+3

Sie haben jene Linie vor dem 'project' Befehl zu setzen. Hast du das getan? Der C-Compiler ist speziell für CMake. Ich würde dir sogar raten, es umgekehrt zu machen, wenn der Compiler als ICC erkannt wird, benutze auch MKL. – usr1234567

+0

@ usr1234567 Ja, ich habe das getan. Es funktioniert nur vor meiner Projektdefinition, aber nicht danach. Es sieht aus wie ein Kluge in CMakeLise.txt, aber vielleicht ist es in Ordnung. – rth

Antwort

1
  1. Sie können den Code, bevor Sie Ihren project Anruf bewegen. Ich bezweifle, dass der Code vor dem project Aufruf schlecht aussieht. Es wird auch empfohlen, zuerst cmake_minimum_required und dann project zu setzen.

  2. Wenn Sie den ersten Weg nicht mögen, rufen project mit der Sprache NONE (es leer verlassen würde bedeuten, C und C++), indem Sie Ihren Code gefolgt, und schließlich enable_language(C).

  3. Eigentlich sollte man in Ihrem Fall anders herum denken: Abhängig vom gefundenen C-Compiler suchen Sie nach MKL und aktivieren es. Für CMake ist der C-Compiler wichtig, spielen Sie nicht damit herum, sondern kehren Sie Ihre Logik um. Ich weiß, manchmal sind diese Argumente nicht gültig, abhängig vom Projekt.

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

+0

Vielen Dank, @ usrt1234567. Ich bin mir nicht sicher über (3). MKL funktioniert nur mit ICC, aber ICC kann ohne MKL installiert werden. Wenn es also MKL ist, muss der Compiler ICC sein, aber nicht umgekehrt. – rth

+1

Ja, sicher. Es sollte sein: Compiler ist ICC? => suche nach MKL => wenn gefunden, enable. So soll CMake benutzt werden, IMHO. – usr1234567

Verwandte Themen