Недавно возникла необходимость отказаться от стандартного линковщика в visual studio и перейти на CMake (соответственно опыта его использования у меня нет).
Вот как выглядит мой проект:
-ALPHA
-assimp
-Engine
-Game
-SFML-2.5.1
-ALPHA_Engine.cpp(тут мейн функция)
-ALPHA_Engine.h
-CMakeLists.txt
...dll из sfml
-out(тут лежат билды)
CMakeLists.txt
В папка assimp,Engine,Gama,SFML-2.5.1 лежат .cpp и .h
Вот как выглядит внутренний CMakeLists.txt:
# CMakeList.txt : CMake project for ALPHA_Engine, include source and define
# project specific logic here.
#
cmake_minimum_required (VERSION 3.8)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(sfml-graphics)
find_package(sfml-window)
find_package(sfml-system)
find_package(OpenGL)
find_package(assimp)
SET (ALPHA_Engine "${PROJECT_SOURCE_DIR}/ALPHA_Engine/")
SET (assimpLIB "${PROJECT_SOURCE_DIR}/ALPHA_Engine/assimp/lib/")
SET (assimpINCLUDE "${PROJECT_SOURCE_DIR}/ALPHA_Engine/assimp/include/")
SET (Engine "${PROJECT_SOURCE_DIR}/ALPHA_Engine/Engine/")
SET (Game "${PROJECT_SOURCE_DIR}/ALPHA_Engine/Game/")
SET (SFML "${PROJECT_SOURCE_DIR}/ALPHA_Engine/SFML-2.5.1/")
SET (SFMLlib "${PROJECT_SOURCE_DIR}/ALPHA_Engine/SFML-2.5.1/lib/")
SET (SFMLinclude "${PROJECT_SOURCE_DIR}/ALPHA_Engine/SFML-2.5.1/include/")
include_directories(${assimpINCLUDE})
include_directories(${Engine})
include_directories(${Game})
include_directories(${SFML})
include_directories(${SFMLinclude})
file(GLOB SOURCES "${Engine}*.cpp" "${Game}*.cpp")
# Add source to this project's executable.
add_executable (ALPHA_Engine
ALPHA_Engine.cpp
ALPHA_Engine.h
${SOURCES}
${SFMLinclude}SFML/Window.hpp
${SFMLinclude}SFML/OpenGL.hpp
${SFMLinclude}SFML/Graphics.hpp
${assimpINCLUDE}assimp/Importer.hpp
${assimpINCLUDE}assimp/scene.h
${assimpINCLUDE}assimp/postprocess.h
)
target_link_libraries(ALPHA_Engine
PRIVATE ${SFMLlib}sfml-graphics.lib
PRIVATE ${SFMLlib}sfml-system.lib
PRIVATE ${SFMLlib}sfml-window.lib
PRIVATE ${assimpLIB}assimp-vc143-mtd.lib
)
# TODO: Add tests and install targets if needed.
Вот как выглядит main функция(у меня файл с ней имеет отличное название...не знаю, может это критично?):
int main()
{
HWND hwnd = GetConsoleWindow();
ShowWindow(hwnd, 1);
Game->Start(); //Эта функция сработает, так как лежит в том же файле, где и мейн функция
render->StartRender(camera); //Эта функция как будто вообще отсутствует в билде. Я не обнаружил никаких признаков того, что она работает. И так с абсолютно всеми функциями, определение которых находится не в том же файле, где мейн функция
InpSys->Screen = render->GetScreenClass()->GetScreen();
camera->GetDirectionOfView();
while (!World::GetStateOfGame())
{
InpSys->IO_Events();
Game->Update();
render->RenderLoop(camera);
}
}
Был бы рад также получить от вас рекомендацию по CMake туториалам, так как я пока плохо понимаю что я вообще делаю :)