2010-03-13 2 views
10

gcc 4.4.2/Visual Studio C++ 2008cmake e visual studio

Ho usato cmake su linux, senza problemi.

Ora ho eseguito il porting dell'applicazione per l'esecuzione su Windows.

ho generato il file di soluzione con CMake -G "Visual Studio 9 2008 ../src"

Tuttavia, so che CMake crea solo un Makefile che viene utilizzato dal compilatore per generare l'applicazione.

Apro la mia soluzione in Visual Studio, premo il tasto F7 per compilare.

Mi chiedo in realtà utilizza il Makefile generato da cmake? O sta semplicemente compilando l'applicazione come qualsiasi normale programma di Visual Studio?

Molte grazie per qualsiasi consiglio,

risposta

18

Cmake genera una soluzione di Visual Studio e un file di progetto.

La soluzione contiene almeno tre progetti:

  • ALL_BUILD
  • ProgettoUtente
  • ZERO_CHECK

La soluzione è impostato in modo che quando si genera il progetto (con una soluzione costruttiva, o costruisci un progetto) "YourProject" sarà costruito e quindi verrà creato ZERO_CHECK, causando l'esecuzione di cmake e controllando se qualcosa è cambiato. Se qualcosa è cambiato, la soluzione e il file di progetto verranno rigenerati e Visual Studio chiederà se si desidera ricaricare.

La compilazione del programma viene eseguita da Visual Studio, come se lo si configurasse manualmente, ma Visual Studio eseguirà cmake, controllando quindi se qualcosa è stato modificato ei file di progetto devono essere rigenerati.

+0

Questo è fondamentalmente corretto, ma il progetto ZERO_CHECK verrà creato prima di qualsiasi altro progetto di Visual Studio. Ogni progetto generato da CMake ha una dipendenza di build diretta per ZERO_CHECK, ad eccezione del progetto INSTALL di CMake, che ha solo una dipendenza da ALL_BUILD (che a sua volta ha una dipendenza da ZERO_CHECK ...) – Manuzor

10

CMake genera "reale" .vcproj file, in modo da Visual Studio costruirà il progetto come qualsiasi normale progetto di Visual Studio. Non sono coinvolti i makefile.

+0

La parte di cui sono curioso è CMakeList.txt. Il compilatore fa qualcosa con questo. Il motivo per cui ho chiesto è stato quando ho modificato il mio CMakelists.txt. Ho ricevuto un errore di collegamento perché non ho aggiunto il nome di una libreria "ws2_32, ad esempio TARGET_LINK_LIBRARIES (client clt ws2_32) .Come fa il compilatore a utilizzare CMakeLists.txt? Grazie. – ant2009

+3

CMake crea per te file * .vcproj in base alle informazioni nel file CMakeLists.txt. Il comando TARGET_LINK_LIBRARIES indica a CMake di inserire le direttive necessarie nei file * .vcproj in modo che il compilatore di Visual Studio si colleghi alle librerie corrette. – JesperE