2012-12-13 18 views
11

Sto provando a forzare cmake a compilare il mio codice cpp con g ++, poiché per impostazione predefinita utilizza invece clang. Quindi io uso: cmake -D CMAKE_CXX_COMPILER=g++ ../src/CMakeLists.txt dopo che i controlli cmake per gcc e g ++ (con successo), ma comunque make VERBOSE=1 rendimentiCmake non onora -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 

Come si chiama/usr/bin/C++ non/usr/bin/g ++ Concordo si usa ancora clang. Qualche idea qual è il problema? So di avere g ++ ed è in/usr/bin /. Sto con Mac OS X 10.8.2

+3

Probabilmente una domanda sciocca ma molte persone dimenticano. Hai rimosso l'intero contenuto della directory di build prima di eseguire cmake con tale opzione di configurazione? Una volta che una variabile viene impostata una volta per una determinata directory di build (automaticamente o manualmente) viene ignorata nelle esecuzioni future, in modo che l'opzione debba essere utilizzata alla prima esecuzione e solo alla prima esecuzione. – John5342

+0

@ John5342 - questo ha fatto il trucco! Sono un newbie cmake, quindi non sapevo della necessità di pulire la directory di build. Grazie. – Puchatek

+0

Siccome ero per caso corretto, l'ho aggiunto come risposta corretta includendo anche la fonte. Quando ho imparato per la prima volta cmake ho trovato molto utile il manuale e la pagina citata. – John5342

risposta

12

CMAKE_CXX_COMPILER può essere impostato solo la prima volta cmake viene eseguito in una data directory di compilazione. Nelle esecuzioni successive viene ignorato. Per cambiare CMAKE_CXX_COMPILER è necessario prima eliminare i contenuti della directory di build e quindi eseguire di nuovo cmake con tale opzione.

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

Credo che il ragionamento per utilizzando solo quella variabile alla prima esecuzione è perché cambiare in un secondo momento sarebbe potenzialmente invalidare tutto già costruito compresi i controlli di configurazione in modo CMake avrebbe dovuto partire da zero in ogni caso.

+0

Grazie - questo mi ha fatto un paio di volte. Sarebbe bello se cmake avesse un'opzione "pulita". – ccook

1

lo faccio come questo, invece:

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

Non funziona neanche ... echo $ CXX yeilds/usr/bin/g ++, ma durante la compilazione vedo ancora/usr/bin/C++ è usato: | – Puchatek