2012-08-03 7 views
36

Sto tentando di eseguire un programma cmake ciao mondo su Windows 7 x64 con Visual Studio 2010 e Cygwin, ma non riesco a trovare nessuno dei due a lavorare. La mia struttura di directory è la seguente:CMake non è in grado di determinare la lingua del linker con C++

HelloWorld 
-- CMakeLists.txt 
-- src/ 
-- -- CMakeLists.txt 
-- -- main.cpp 
-- build/ 

faccio un cd build seguito da un cmake .., e ottengo un errore che indica che

CMake Error: CMake can not determine linker language for target:helloworld 
CMake Error: Cannot determine link language for target "helloworld". 

Tuttavia, se cambio l'estensione del main.cpp al principale. c sia sul mio filesystem che su src/CMakeLists.txt tutto funziona come previsto. Questo è il caso in esecuzione sia dal prompt dei comandi di Visual Studio (Visual Studio Solution Generator) che dal terminale Cygwin (Unix Makefiles Generator).

Qualche idea sul perché questo codice non funzionerebbe?

CMakeLists.txt

PROJECT(HelloWorld C) 
cmake_minimum_required(VERSION 2.8) 

# include the cmake modules directory 
set(CMAKE_MODULE_PATH ${HelloWorld_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) 

add_subdirectory(src) 

src/CMakeLists.txt

# Include the directory itself as a path to include directories 
set(CMAKE_INCLUDE_CURRENT_DIR ON) 

# Create a variable called helloworld_SOURCES containing all .cpp files: 
set(HelloWorld_SOURCES main.cpp) 

# Create an executable file called helloworld from sources: 
add_executable(hello ${HelloWorld_SOURCES }) 

src/main.cpp

int main() 
{ 
    return 0; 
} 
+0

"[...] se cambio l'estensione di main.cpp [...]" A cosa si cambia? .cc? – JAB

+0

oops. Lasciato fuori per caso. Lo cambio in ".c". Modificato nel post originale. Mi fa quasi pensare che non ci sia un compilatore di cpp o qualcosa del genere, ma g ++ è nascosto e lo studio visivo non dovrebbe avere problemi con C++. –

risposta

23

Provare a cambiare

PROJECT(HelloWorld C) 

in

PROJECT(HelloWorld C CXX) 

o semplicemente

PROJECT(HelloWorld) 

See: http://www.cmake.org/cmake/help/v2.8.8/cmake.html#command:project

+0

Questo lo farebbe. Sapevo che stavo facendo qualcosa di stupido. Grazie! –

+1

Questo non è stato utile per me. L'errore del linker è rimasto, vedere la mia risposta che cosa ha contribuito a risolverlo. – Joakim

72

Ho anche ottenuto l'errore si parla:

CMake Error: CMake can not determine linker language for target:helloworld 
CMake Error: Cannot determine link language for target "helloworld". 

Nel mio caso questo è stato a causa di avere C++ file con l'estensione .cc.

Se CMake è in grado di determinare la lingua del codice correttamente è possibile utilizzare il seguente:

set_target_properties(hello PROPERTIES LINKER_LANGUAGE CXX) 

La risposta accettata che suggerisce aggiungendo la lingua la dichiarazione project() aggiunge semplicemente controllo più rigoroso per ciò che il linguaggio è utilizzato (secondo la documentazione), ma non è stato utile per me:

Opzionalmente è possibile specificare le lingue supportate dal progetto. I linguaggi di esempio sono CXX (cioè C++), C, Fortran, ecc. Per impostazione predefinita C e CXX sono abilitati. Per esempio. se non si dispone di un compilatore C++, è possibile disabilitare il controllo per elencando esplicitamente le lingue da supportare, ad esempio , ad es. C. Usando la lingua speciale "NONE" tutti i controlli per qualsiasi lingua possono essere disabilitati. Se esiste una variabile denominata CMAKE_PROJECT__INCLUDE_FILE, il file a cui punta la variabile verrà incluso come ultimo passaggio del comando di progetto.

22

Nel mio caso, era solo perché non c'erano file sorgente nella destinazione. Tutta la mia biblioteca era modello con codice sorgente nell'intestazione. L'aggiunta di un file.cpp vuoto ha risolto il problema.

+4

imposta le proprietà di destinazione funziona anche per il problema del file no cpp. –

+0

Complimenti per la mancia. Ho anche dimenticato di spostare le mie fonti nella rispettiva sottodirectory 'src' del mio progetto' cmake' appena creato (una libreria condivisa) e questa era fondamentalmente la causa dell'intero problema. In questi casi si apprezza davvero avere un mago che si prenda cura della struttura del proprio progetto 'cmake'. : D – rbaleksandar

+0

Lo stesso motivo qui (errore di copia-incolla). Grazie! – Vivit

Problemi correlati