2017-07-09 2 views
1

J'ai un projet dans CLion dans lequel j'ai besoin d'inclure une bibliothèque du SDK Windows 8.1, donc j'ai essayé d'utiliser CMake pour le lier.
Je n'ai pas de fichiers .so ou .dll, mais .lib (ou directement le fichier .h).
Plus précisément, cette bibliothèque est dsound.h.
J'ai essayé de chercher des questions connexes, mais aucune des solutions que j'ai trouvées ne fonctionne pour moi: comment puis-je le faire?CMake lier Windows SDK

Mon CMakeLists.txt actuelle est

cmake_minimum_required(VERSION 3.7) 

project(Project) 

set(CMAKE_CXX_STANDARD 11) 

include_directories(${WinSDK}) 

set(SOURCE_FILES main.cpp file1.h file1.cpp) 
add_executable(Project ${SOURCE_FILES}) 
target_link_libraries(Project ${WinSDK}) 

où WinSDK est la variable contenant l'emplacement du SDK de Windows.

L'erreur que je reçois est la suivante:

[ 33%] Building CXX object CMakeFiles/Project.dir/main.cpp.obj 
[ 66%] Building CXX object CMakeFiles/Project.dir/soundclass.cpp.obj 
In file included from C:\projectPath\soundclass.cpp:4:0: 
C:\projectPath\soundclass.h:21:24: fatal error: dsound.h: No such file or directory 
In file included from C:\projectPath\main.cpp:5:0: 
C:\projectPath\soundclass.h:21:24: fatal error: dsound.h: No such file or directory 
compilation terminated. 
compilation terminated. 
CMakeFiles\Project.dir\build.make:61: recipe for target 'CMakeFiles/Project.dir/main.cpp.obj' failed 
CMakeFiles\Project.dir\build.make:85: recipe for target 'CMakeFiles/Project.dir/soundclass.cpp.obj' failed 
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/Project.dir/all' failed 
mingw32-make.exe[3]: *** [CMakeFiles/Project.dir/main.cpp.obj] Error 1 
mingw32-make.exe[3]: *** Waiting for unfinished jobs.... 
mingw32-make.exe[3]: *** [CMakeFiles/Project.dir/soundclass.cpp.obj] Error 1 
mingw32-make.exe[2]: *** [CMakeFiles/Project.dir/all] Error 2 
CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/Project.dir/rule' failed 
Makefile:117: recipe for target 'Project' failed 
mingw32-make.exe[1]: *** [CMakeFiles/Project.dir/rule] Error 2 
mingw32-make.exe: *** [Project] Error 2 
+0

Où avez-vous initialiser la variable 'WinSDK' ? Quelque part dans une portée supérieure? Les fichiers d'en-tête sont-ils exactement situés à l'emplacement que vous avez enregistré dans la variable 'WinSDK'? – Akira

+0

La variable 'WinSDK' a été définie dans les variables de chemin de CLion; maintenant je l'ai changé en fonction de include et library, comme suggéré par @utopia, et cela fonctionne. – thesmith

+0

Mon intention avec ma question était de s'assurer que vous définissez l'emplacement exact des en-têtes et des bibliothèques ou non. Il semble que ce soit la cause première de votre problème. – Akira

Répondre

0

${WinSDK} ne peut pas être correctement réglé puisque vous utilisez la même variable de la même manière pour les inclure et la bibliothèque.

Autres conseils:

  • CMAKE_CXX_STANDARD ne fait rien pour le compilateur MSVC
  • il est préférable d'utiliser target_include_directories() que include_directories() pour conserver les informations cible plus propre
+1

Merci, c'était le problème. Merci également pour les autres conseils. – thesmith