2012-12-13 1 views
11

Ich versuche CMake zu erzwingen, um meinen cpp-Code mit g ++ zu erstellen, da standardmäßig clang verwendet wird. So verwende ich: cmake -D CMAKE_CXX_COMPILER=g++ ../src/CMakeLists.txt nach dem Cmake Kontrollen für gcc und g ++ (mit Erfolg), aber dennoch make VERBOSE=1 AusbeutenCmake honoriert nicht -D CMAKE_CXX_COMPILER = g ++

/usr/bin/c++  -o CMakeFiles/trial_cpp.dir/trial.cpp.o -c "/Users/Kuba/Code/Sketchpad/Trial  project/src/trial.cpp" 
Linking CXX executable trial_cpp 
/opt/etlocal/bin/cmake -E cmake_link_script CMakeFiles/trial_cpp.dir/link.txt --verbose=1 
/usr/bin/c++ -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/trial_cpp.dir/trial.cpp.o -o trial_cpp 

Wie es nennt/usr/bin/C++ nicht/usr/bin/g ++ Ich schließe es noch verwendet klingeln. Irgendeine Idee, was ist das Problem? Ich weiß, ich habe g ++ und es ist in/usr/bin /. ich Mac OS X 10.8.2

+3

Wahrscheinlich eine dumme Frage, aber viele Leute vergessen. Haben Sie den gesamten Inhalt des Build-Verzeichnisses entfernt, bevor Sie Cmake mit dieser Konfigurationsoption ausführen? Sobald diese Variable einmal für ein bestimmtes Build-Verzeichnis (automatisch oder manuell) gesetzt wurde, wird sie bei zukünftigen Läufen ignoriert, so dass diese Option beim ersten Lauf und nur beim ersten Lauf verwendet werden muss. – John5342

+0

@ John5342 - das hat den Trick! Ich bin ein CMake-Neuling, also wusste ich nicht über die Notwendigkeit, Build-Dir zu reinigen. Vielen Dank. – Puchatek

+0

Da ich zufällig richtig war, habe ich es als eine richtige Antwort einschließlich der Quelle hinzugefügt. Als ich das erste Mal cmake lernte, fand ich das Handbuch und die zitierte Seite sehr nützlich. – John5342

Antwort

12

CMAKE_CXX_COMPILER kann nur das erste Mal eingestellt werden cmake in einem bestimmten Build-Verzeichnis ausgeführt wird. Bei nachfolgenden Läufen wird es ignoriert. Um CMAKE_CXX_COMPILER zu ändern, müssen Sie zuerst den Inhalt des Build-Verzeichnisses löschen und dann cmake erneut mit dieser Option ausführen.

Quelle: http://www.cmake.org/Wiki/CMake_Useful_Variables

Ich glaube, die Begründung für nur diese Variable auf dem ersten Lauf mit, weil es würde alles später ändert möglicherweise ungültig bereits inklusive der Konfigurationsüberprüfungen eingebaut, so Cmake von Grund auf jeden Fall beginnen würde.

+0

Danke - das hat mich ein paar Mal bekommen. Es wäre schön, wenn CMake eine "saubere" Option hätte. – ccook

1

laufen kann ich es wie folgt statt:

CXX=/usr/bin/g++ cmake ../src/CMakeLists.txt 
+0

Funktioniert auch nicht ... echo $ CXX yeilds/usr/bin/g ++, aber beim Kompilieren sehe ich immer noch/usr/bin/C++: | – Puchatek