it-swarm.com.de

CM kann die Linkersprache mit C++ nicht bestimmen

Ich versuche, ein cmake-Hallo-Welt-Programm unter Windows 7 x64 sowohl mit Visual Studio 2010 als auch mit Cygwin auszuführen, kann aber anscheinend nicht zur Arbeit kommen. Meine Verzeichnisstruktur sieht wie folgt aus:

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

Ich mache einen cd build, gefolgt von einem cmake .., und erhalte eine Fehlermeldung 

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

Wenn ich jedoch die Erweiterung von main.cpp in main.c auf meinem Dateisystem und in src/CMakeLists.txt ändere, 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;
}
51
Chris Covert

Versuchen Sie es zu ändern

PROJECT(HelloWorld C)

in

PROJECT(HelloWorld C CXX)

oder nur

PROJECT(HelloWorld)

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

28
olovb

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 war dies auf C++ - Dateien mit der Erweiterung .cc zurückzuführen.

Wenn CMake die Sprache des Codes nicht richtig ermitteln kann, können Sie Folgendes verwenden:

set_target_properties(hello PROPERTIES LINKER_LANGUAGE CXX)

Die akzeptierte Antwort, die das Anhängen der Sprache an die project()-Anweisung vorschlägt, fügt einfach eine strengere Prüfung der verwendeten Sprache hinzu (laut Dokumentation), war mir aber nicht hilfreich:

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

109
Joakim

In meinem Fall lag es einfach daran, dass sich im Ziel keine Quelldatei befand. Alle meine Bibliothek war Vorlage mit Quellcode in der Kopfzeile. Durch das Hinzufügen einer leeren Datei.cpp wurde das Problem behoben.

38
Moebius

So verwirrend es auch sein mag, der Fehler tritt auch auf, wenn keine im Projekt enthaltene CPP-Datei vorhanden ist.

Wenn Sie Ihre Quelldateien in CMakeLists.txt auflisten und versehentlich einen Dateinamen eingeben, wird dieser Fehler angezeigt.

6
Jolly Roger

Beim Kompilieren meines C-basierten Codes ist ein ähnlicher Fehler aufgetreten. Ich habe das Problem behoben, indem ich den Quelldateipfad in meiner cmake-Datei korrigiert habe. Bitte überprüfen Sie den Quelldateipfad jeder in Ihrer cmake-Datei angegebenen Quelldatei. Das könnte dir auch helfen.

2
user2999709

Standardmäßig wird der Ordner "JNI Native" als jni bezeichnet. Umbenennen in cpp Problem behoben

0
HimalayanCoder

Eine etwas unabhängige Antwort auf OP, aber für Leute wie mich mit einem etwas ähnlichen Problem.

Anwendungsfall: Ubuntu (C, Clion, Auto-Vervollständigung):

Ich hatte den gleichen Fehler,

CMake-Fehler: Linksprache für Ziel "Hallo" kann nicht ermittelt werden.

set_target_properties(hello PROPERTIES LINKER_LANGUAGE C) help behebt das Problem, aber die Header sind nicht im Projekt enthalten und die automatische Vervollständigung funktioniert nicht.

Das hatte ich

cmake_minimum_required(VERSION 3.5)

project(hello)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES ./)

add_executable(hello ${SOURCE_FILES})

set_target_properties(hello PROPERTIES LINKER_LANGUAGE C)

Keine Fehler, aber nicht das, was ich brauchte. Wenn ich eine einzelne Datei als Quelle hinzufüge, bekomme ich eine automatische Vervollständigung und der Linker wird auf C gesetzt.

cmake_minimum_required(VERSION 3.5)

project(hello)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES ./1_helloworld.c)

add_executable(hello ${SOURCE_FILES})
0
fayz

Es gelang mir, meine zu lösen, indem ich mich veränderte 

add_executable (file1.cpp)

zu 

add_executable (Projektname file1.cpp)

0
AKJ