J'essaie de lancer un programme cmake hello world sous Windows 7 x64 avec Visual Studio 2010 et Cygwin, mais ne semble pas pouvoir fonctionner non plus. 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 j'obtiens une erreur indiquant que
CMake Error: CMake can not determine linker language for target:helloworld
CMake Error: Cannot determine link language for target "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 à partir de l’invite de commande Visual Studio (Visual Studio Solution Generator) et du terminal Cygwin (Unix Makefiles Generator).
Une idée pourquoi ce code ne fonctionnerait pas?
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;
}
Essayez de changer
PROJECT(HelloWorld C)
dans
PROJECT(HelloWorld C CXX)
ou juste
PROJECT(HelloWorld)
Voir: http://www.cmake.org/cmake/help/v2.8.8/cmake.html#command:project
J'ai aussi l'erreur que vous mentionnez:
CMake Error: CMake can not determine linker language for target:helloworld
CMake Error: Cannot determine link language for target "helloworld".
Dans mon cas, cela était dû au fait que les fichiers C++ avaient l'extension .cc
.
Si CMake est incapable de déterminer correctement la langue du code, vous pouvez utiliser les éléments suivants:
set_target_properties(hello PROPERTIES LINKER_LANGUAGE CXX)
La réponse acceptée qui suggère d'ajouter le langage à l'instruction project()
ajoute simplement une vérification plus stricte du langage utilisé (selon la documentation), mais cela ne m'a pas été utile:
Vous pouvez éventuellement spécifier les langues prises en charge par votre projet . Les exemples de langage sont CXX (c.-à-d. C++), C, Fortran, etc. Par défaut, C et CXX sont activés. Par exemple. Si vous n'avez pas de compilateur C++, vous pouvez désactivez la vérification en listant explicitement les langues de votre choix soutenir, par exemple C. En utilisant la langue spéciale "NONE" toutes les vérifications pour n'importe quelle langue peut être désactivé. S'il existe une variable appelée CMAKE_PROJECT__INCLUDE_FILE, le fichier pointé par celui-ci La variable sera incluse à la dernière étape de la commande du projet.
Dans mon cas, c'était simplement parce qu'il n'y avait pas de fichier source dans la cible. Toute ma bibliothèque était un modèle avec un code source dans l'en-tête. L’ajout d’un fichier.cpp vide a résolu le problème.
Aussi déroutant soit-il, l'erreur se produit également lorsqu'un fichier cpp inclus dans le projet n'existe pas.
Si vous répertoriez vos fichiers source dans CMakeLists.txt et tapez par erreur un nom de fichier, vous obtenez cette erreur.
J'ai également fait face à 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
. Veuillez vérifier le chemin du fichier source de chaque fichier source mentionné dans votre fichier cmake
. Cela pourrait vous aider aussi.
Par défaut, le dossier JNI Native est nommé jni . Le renommer en cpp corrige le problème
Réponse un peu sans rapport avec OP mais pour des gens comme moi avec un problème un peu similaire.
Cas d'utilisation: Ubuntu (C, Clion, complétion automatique):
J'ai eu la même erreur,
Erreur CMake: Impossible de déterminer la langue du lien pour la cible "hello".
set_target_properties(hello PROPERTIES LINKER_LANGUAGE C)
help corrige ce problème, mais les en-têtes ne sont pas inclus dans le projet et l'auto-complétion ne fonctionnera pas.
C'est 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)
Aucune erreur, mais pas ce dont j'avais besoin, j'ai compris qu'un seul fichier en tant que source m'obtiendrait en complétant automatiquement l'auto-complétion et en définissant le lieur sur 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})
J'ai réussi à résoudre le mien, en changeant
add_executable (fichier1.cpp)
à
add_executable (ProjectName file1.cpp)