Bonjour à tous,

Ceci est mon premier post. Il est un peu long, mais précis.
J'espère ne pas me tromper de sous-forum, désolé par avance.

Dans le cadre d'un projet perso, je cherche à configurer un projet OpenGL qui utilise les librairies GLFW, GLEW et GLM, le tout en C++.
J'utilise l'IDE JetBrains CLion et donc cmake pour builder le projet.
J'avais commencé à suivre un tuto pour configurer tout ça : "https://www.youtube.com/watch?v=3OB3j330SMc&t=15m11s" (la première partie est sur Visual Studio).

Voilà le soucis, comme précisé dans le titre je suis sur Linux. J'essaie donc d'adapter la configuration à mon OS puisque le tuto était sur Windows. Et ça bloque au niveau du linkage de glew et glfw.

Pour reprendre au début, j'ai buildé les librairies proprement sur Linux en release avec CLion. Je me retrouve avec les librairies statiques "libglfw3.a" et "libGLEW.a".

Mon projet est structuré comme suit (à partir de la racine nommée "gameEngine") :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+ Bin
+ Lib
-- libGLEW.a 
-- libglfw3.a
+ Includes 
-- + Glfw   
-- + Glew
-- + Glm
+ game_engine_1
-- + Headers
-- + Sources
-- -- CMakeLists.txt
-- -- Main.cpp
CMakeLists.txt
J'ai donc copié les librairies dans "Lib", et mis les headers nécessaires de chaque libraire dans "Includes/G...".
Ensuite, voici le "CMakeLists.txt" situé à la racine :
Code CMakeLists : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
PROJECT(gameEngine)
 
SET(CMAKE_CXX_STANDARD 14)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/Bin)
 
LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/Lib)
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/Includes)
 
ADD_SUBDIRECTORY(game_engine_1/Sources)
Suivi de "./game_engine_1/Sources/CMakeLists.txt" :
Code CMakeLists : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/game_engine_1/Headers)
 
FILE(GLOB_RECURSE ENGINE_SOURCES *.cpp *.c)
FILE(GLOB_RECURSE ENGINE_HEADERS *.hpp *.h *.inl)
 
ADD_EXECUTABLE(game_engine_1 ${ENGINE_SOURCES} ${ENGINE_HEADERS})
 
ADD_LIBRARY(glfw3 STATIC Main.cpp)   #J'ai rajouté ces 2 lignes par rapport au tuto
ADD_LIBRARY(GLEW STATIC Main.cpp)
 
TARGET_LINK_LIBRARIES(game_engine_1 glfw3 GLEW) #Là j'ai modifié glew32 pour GLEW puisque je suis sur Linux
Pour finir j'ai un petit Main pour tester que ça compile et ça fonctionne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
#include "Glew/glew.h"
#include "Glfw/glfw3.h"
 
int Main(int args, char** argv)
{
    glfwInit();
    glewInit();
 
    return 0;
}
Et donc j'ai essayé plein de choses différentes avec le 2e CMake, je vous ai montré la version qui produit les résultats les plus cohérents, que voici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
cmake --build /home/tc/game-engine/gameEngine/cmake-build-debug --target game_engine_1 -- -j 3
Scanning dependencies of target GLEW
Scanning dependencies of target glfw3
[ 16%] Building CXX object game_engine_1/Sources/CMakeFiles/GLEW.dir/Main.cpp.o
[ 33%] Building CXX object game_engine_1/Sources/CMakeFiles/glfw3.dir/Main.cpp.o
[ 50%] Linking CXX static library libGLEW.a
[ 66%] Linking CXX static library libglfw3.a
[ 66%] Built target GLEW
[ 66%] Built target glfw3
Scanning dependencies of target game_engine_1
[ 83%] Building CXX object game_engine_1/Sources/CMakeFiles/game_engine_1.dir/Main.cpp.o
[100%] Linking CXX executable ../../../Bin/game_engine_1
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o : Dans la fonction « _start » :
(.text+0x20) : référence indéfinie vers « main »
CMakeFiles/game_engine_1.dir/Main.cpp.o : Dans la fonction « Main(int, char**) » :
/home/tc/game-engine/gameEngine/game_engine_1/Sources/Main.cpp:6 : référence indéfinie vers « glfwInit »
/home/tc/game-engine/gameEngine/game_engine_1/Sources/Main.cpp:7 : référence indéfinie vers « glewInit »
collect2: error: ld returned 1 exit status
game_engine_1/Sources/CMakeFiles/game_engine_1.dir/build.make:105: recipe for target '../Bin/game_engine_1' failed
make[3]: *** [../Bin/game_engine_1] Error 1
CMakeFiles/Makefile2:118: recipe for target 'game_engine_1/Sources/CMakeFiles/game_engine_1.dir/all' failed
make[2]: *** [game_engine_1/Sources/CMakeFiles/game_engine_1.dir/all] Error 2
CMakeFiles/Makefile2:125: recipe for target 'game_engine_1/Sources/CMakeFiles/game_engine_1.dir/rule' failed
make[1]: *** [game_engine_1/Sources/CMakeFiles/game_engine_1.dir/rule] Error 2
Makefile:138: recipe for target 'game_engine_1' failed
make: *** [game_engine_1] Error 2
J'ai suivi la rurique "Linking Libraries" à ce lien : "https://www.jetbrains.com/help/clion/quick-cmake-tutorial.html".
Je crois bien m'y prendre mais un détail m'échappe.
C'est un peu bizarre qu'il regénère 3 fois "Main.cpp.o". Je ne comprends pas encore cmake à 100%.

Donc s'il vous plaît si vous pourriez m'éclairer sur le sujet, ce serait bien aimable à vous

Amicalement,
Chlebz