119 votes

CMake incapable de déterminer le langage du lieur avec C++

Je tente d'exécuter un programme "hello world" cmake sur Windows 7 x64 avec à la fois Visual Studio 2010 et Cygwin, mais je n'arrive pas à faire fonctionner l'un ou l'autre. Ma structure de répertoire est la suivante:

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

Je fais un cd build suivi d'un cmake .., et je reçois une erreur indiquant que

Erreur CMake: CMake ne peut pas déterminer le langage du lien pour la cible : helloworld
Erreur CMake: Impossible de déterminer le langage de liaison pour la cible "helloworld".

Cependant, si je change l'extension de main.cpp en main.c à la fois sur mon système de fichiers et dans src/CMakeLists.txt, tout fonctionne comme prévu. C'est le cas en exécutant à la fois à partir de l'Invite de commandes Visual Studio (Générateur de solutions Visual Studio) et du Terminal Cygwin (Générateur de makefiles Unix).

Avez-vous une idée de pourquoi ce code ne fonctionnerait pas?

CMakeLists.txt

PROJECT(HelloWorld C)
cmake_minimum_required(VERSION 2.8)

# inclure le répertoire des modules cmake
set(CMAKE_MODULE_PATH ${HelloWorld_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})

add_subdirectory(src)

src/CMakeLists.txt

# Inclure le répertoire lui-même en tant que chemin vers les répertoires d'inclusion
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# Créer une variable appelée helloworld_SOURCES contenant tous les fichiers .cpp :
set(HelloWorld_SOURCES main.cpp)

# Créer un fichier exécutable appelé hello à partir des sources :
add_executable(hello ${HelloWorld_SOURCES })

src/main.cpp

int main()
{
  return 0;
}

8voto

Faiz Khan Points 340

Une réponse un peu hors sujet pour l'OP mais pour des personnes comme moi avec un problème quelque peu similaire.

Cas d'utilisation : Ubuntu (C, Clion, Auto-complétion) :

J'ai eu la même erreur,

Erreur de CMake : Impossible de déterminer le langage de liaison pour la cible "hello".

set_target_properties(hello PROPERTIES LINKER_LANGUAGE C) aide à résoudre ce problème mais les en-têtes ne sont pas inclus dans le projet et l'autocomplétion ne fonctionnera pas.

Voici ce que j'avais

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)

Pas d'erreurs mais pas ce dont j'avais besoin, j'ai réalisé qu'inclure un seul fichier en tant que source me permettrait d'avoir l'autocomplétion ainsi que de définir le lien C.

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})

2voto

user2999709 Points 21

J'ai également rencontré une erreur similaire lors de la compilation de mon code basé sur C. J'ai résolu le problème en corrigeant le chemin du fichier source dans mon fichier cmake. Merci de vérifier le chemin du fichier source de chaque fichier source mentionné dans votre fichier cmake. Cela pourrait également vous aider.

2voto

Rahul Das Points 11

Vérifiez simplement le chemin du fichier source. (vers le cpp respectif)

0voto

HimalayanCoder Points 940

Par défaut, le dossier JNI Native est nommé jni. Le renommer en cpp a résolu le problème

-3voto

AKJ Points 576

J'ai réussi à résoudre le mien, en changeant

add_executable(file1.cpp)

à

add_executable(NomDuProjet file1.cpp)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X