@Quark_Hell
C++ программист

Почему после билда CMake функции из других файлов не вызываются?

Недавно возникла необходимость отказаться от стандартного линковщика в 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 туториалам, так как я пока плохо понимаю что я вообще делаю :)
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
@Quark_Hell Автор вопроса
C++ программист
Решением моей проблемы оказалось довольно простым. Внутри кода я относительно задал ссылки на используемые мною файлы. Для построенной версии путь к проекту выглядел уже иначе, поэтому необходимые мне файлы были null.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы