Empfohlene Möglichkeiten, um CMake mit icc über die Konfiguration Optionen?
Ich würde gerne die Intel-compiler icc (oder icpc) mit einem CMake-basierten Projekt (unter Linux, für was es Wert ist). Ich kann natürlich exportieren Sie die CXX-variable beim Aufruf von cmake, z.B. wie
CXX=icpc cmake ../
und dies funktioniert gut. Ich möchte jedoch, diese Entscheidung zu treffen über die option "Benutzerdefiniert". Dafür habe ich parse option Benutzerdefiniert, z.B.
cmake -DMY_COMPILER_OPTION=Intel ..
als
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 ()
und setzen CMAKE_CXX_COMPILER
zusammen mit einigen compiler-flags. Dies funktioniert auch, aber es ist ein wichtiges "aber".
Ich würde auch gerne die option -ipo
(interprozedurale Optimierung) für meinen code beim kompilieren mit icc-plus brauche ich das kompilieren einer statischen library in den build-Prozess. Für diese Arbeit, ich brauche für die Verwendung von Intel xiar
(und auch xilink
denke ich).
cmake bietet tatsächlich eine spezielle Eigenschaft für diese
set_property(TARGET mytarget PROPERTY INTERPROCEDURAL_OPTIMIZATION 1)
aber dies scheint nur funktioniert, wenn der compiler eingestellt wurde über die Umgebungsvariable (dann xiar verwendet wird). Bei der Einstellung der compiler über CMAKE_CXX_COMPILER
wird diese Eigenschaft ignoriert.
Gibt es einen anderen Weg, dies zu tun?. Einige empfohlene Weg? Oder zumindest ein work-around?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, da gab es keine Antworten hier, habe ich auch gedreht, um die CMake-mailing-Liste Liste für Hilfe bei diesem Problem. Die Zustimmung der Experten scheint es, dass die Art, wie ich versuche zu tun, dies ist eine eher schlechte Idee. Der Grund dafür ist, dass die Analyse meiner benutzerdefinierten flags passiert, bis spät in die Initialisierung. Man sollte also darauf angewiesen, dass die Einstellung der compiler über Umgebungsvariablen und lassen CMake tun, seine Magie bei der ersten Konfiguration ausgeführt. Werde ich ändern mein Ansatz..
Eine schnelle Antwort für die Bequemlichkeit, machen Sie eine
INTEL
bauen aus dem source-Verzeichnis:entfernen(je nachdem, was Sprachen, die Sie nicht brauchen)
Grundsätzlich zu vermeiden, zu verändern, versucht der compiler. Finden Sie die FAQ: Wie verwende ich einen anderen compiler?. CMake-Toolchain-Dateien bieten eine Möglichkeit zur Unterstützung von komplexen Fällen, wie eine exotische HPC-compiler.