2012-08-03 5 views
36

Ich versuche, ein Cmake Hallo Welt-Programm auf Windows 7 x64 mit Visual Studio 2010 und Cygwin auszuführen, aber kann nicht scheinen, entweder zu arbeiten. Meine Verzeichnisstruktur ist wie folgt:CMake kann Linkersprache mit C++ nicht bestimmen

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

Ich mache cd build gefolgt von einem cmake .., und erhalten Fehler, der besagt, dass

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

Allerdings, wenn ich die Erweiterung der main.cpp zur Haupt ändern. c sowohl auf meinem filsystem als auch in src/CMakeLists.txt funktioniert alles wie erwartet. Dies ist der Fall, der sowohl von der Visual Studio-Eingabeaufforderung (Visual Studio Solution Generator) als auch vom Cygwin-Terminal (Unix Makefiles Generator) ausgeführt wird.

Irgendeine Idee, warum dieser Code nicht funktionieren würde?

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

"[...] wenn ich die Erweiterung von main.cpp ändern [...]" Was ändern Sie es? .cc? – JAB

+0

oops. Habe das zufällig vergessen. Ich ändere es in '.c'. Im ursprünglichen Beitrag bearbeitet. Es lässt mich fast glauben, dass es keinen cpp-Compiler oder etwas Ähnliches gibt, aber g ++ ist installiert und Visual Studio sollte auch keine Probleme mit C++ haben. –

Antwort

23

Ändern Versuchen

PROJECT(HelloWorld C) 

in

PROJECT(HelloWorld C CXX) 

oder

nur
PROJECT(HelloWorld) 

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

+0

Das würde es tun. Ich wusste, dass ich etwas Dummes tat. Vielen Dank! –

+1

Das war nicht hilfreich für mich. Der Linker Fehler ist geblieben, siehe meine Antwort, was geholfen hat, es zu beheben. – Joakim

72

Ich habe auch den Fehler, den Sie erwähnen:

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

In meinem Fall zu C zurückzuführen war ++ Dateien mit der .cc Erweiterung.

Wenn CMake ist nicht in der Lage, die Sprache des Codes zu bestimmen, richtig können Sie Folgendes verwenden:

set_target_properties(hello PROPERTIES LINKER_LANGUAGE CXX) 

Die akzeptierte Antwort, die die Sprache in die project() Anweisung schlagen Anhänge fügt einfach strenge Prüfung auf welcher Sprache ist verwendet (nach der Dokumentation), aber es war nicht hilfreich für mich:

Optional können Sie angeben, welche Sprachen Ihr Projekt unterstützt. Beispielsprachen sind CXX (d. H. C++), C, Fortran usw. Standardmäßig sind C und CXX aktiviert. Z.B. Wenn Sie keinen C++ - Compiler haben, können Sie die Überprüfung dafür deaktivieren, indem Sie explizit die Sprachen auflisten, die unterstützt, z. C. Mit der speziellen Sprache "NONE" können alle Überprüfungen für jede Sprache deaktiviert werden. Wenn eine Variable namens CMAKE_PROJECT__INCLUDE_FILE existiert, wird die Datei, auf die die Variable zeigt, als letzter Schritt des Projektbefehls eingefügt.

22

In meinem Fall war es nur, weil es keine Quelldatei im Ziel gab. Alle meine Bibliothek war Vorlage mit Quellcode in der Kopfzeile. Durch das Hinzufügen einer leeren Datei.cpp wurde das Problem behoben.

+4

set target properties funktioniert auch für das Problem keine cpp-Datei. –

+0

Kudos für die Spitze. Ich habe auch vergessen, meine Quellen in das entsprechende 'src'-Unterverzeichnis meines neu erstellten' cmake'-Projekts (eine gemeinsame Bibliothek) zu verschieben, und das war im Grunde die Ursache des ganzen Problems. In solchen Fällen ist es sehr hilfreich, einen Assistenten zu haben, der sich um die Struktur Ihres "cmake" -Projekts kümmert. : D – rbaleksandar

+0

Gleicher Grund hier (Copy-Paste-Fehler). Vielen Dank! – Vivit