cmake_minimum_required(VERSION 3.15) project(space-game001 CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Список исходных файлов set(SOURCES ../src/main.cpp ../src/Game.cpp ../src/Environment.cpp ../src/BoneAnimatedModel.cpp ../src/TextModel.cpp ../src/Projectile.cpp ../src/SparkEmitter.cpp ../src/UiManager.cpp ../src/render/Renderer.cpp ../src/render/ShaderManager.cpp ../src/render/TextureManager.cpp ../src/render/FrameBuffer.cpp ../src/render/OpenGlExtensions.cpp ../src/utils/Utils.cpp ../src/utils/TaskManager.cpp ../src/utils/Perlin.cpp ../src/planet/PlanetData.cpp ../src/planet/PlanetObject.cpp ../src/planet/StoneObject.cpp ) add_executable(space-game001 ${SOURCES}) # Пути к инклудам target_include_directories(space-game001 PRIVATE ../src ./src ../thirdparty1/eigen-5.0.0 ../thirdparty1/boost_1_90_0 ./thirdparty/libzip-1.11.3/build-emcmake/install/include ) # Пути к либам и сами либы target_link_directories(space-game001 PRIVATE ./thirdparty/libzip-1.11.3/build-emcmake/install/lib ) target_link_libraries(space-game001 zip z) set(EMSCRIPTEN_FLAGS "-sUSE_SDL=2" "-sUSE_SDL_IMAGE=2" "-sUSE_LIBPNG=1" "-pthread" "-sUSE_PTHREADS=1" "-fexceptions" ) # Добавляем флаги компиляции target_compile_options(space-game001 PRIVATE ${EMSCRIPTEN_FLAGS} "-O2" ) # Специфичные флаги только для линковки set(EMSCRIPTEN_LINK_FLAGS ${EMSCRIPTEN_FLAGS} # SDL и Pthreads нужны и здесь "-O2" "-sPTHREAD_POOL_SIZE=4" "-sTOTAL_MEMORY=4294967296" "-sINITIAL_MEMORY=3221225472" "-sMAXIMUM_MEMORY=4294967296" "-sALLOW_MEMORY_GROWTH=1" "--preload-file resources.zip" ) # Используем современный target_link_options вместо set_target_properties target_link_options(space-game001 PRIVATE ${EMSCRIPTEN_LINK_FLAGS}) # Объединяем флаги в строку и применяем к таргету string(REPLACE ";" " " EMSCRIPTEN_LINK_FLAGS_STR "${EMSCRIPTEN_LINK_FLAGS}") set_target_properties(space-game001 PROPERTIES LINK_FLAGS "${EMSCRIPTEN_LINK_FLAGS_STR}" SUFFIX ".html" ) # Добавляем те же флаги для компиляции (pthread, exceptions и т.д.) target_compile_options(space-game001 PRIVATE -O2 -pthread -fexceptions) # 1. Определяем пути set(RESOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../resources") set(RESOURCES_ZIP "${CMAKE_CURRENT_BINARY_DIR}/resources.zip") get_filename_component(RESOURCES_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.." ABSOLUTE) # 2. Создаем команду для запаковки add_custom_command( OUTPUT "${RESOURCES_ZIP}" # Указываем "resources" как объект упаковки COMMAND ${CMAKE_COMMAND} -E tar "cf" "${RESOURCES_ZIP}" --format=zip "resources" # Запускаем из корня проекта, чтобы путь "resources" был валидным WORKING_DIRECTORY "${RESOURCES_PARENT_DIR}" DEPENDS "${RESOURCES_PARENT_DIR}/resources" COMMENT "Packing resources folder into ${RESOURCES_ZIP}..." ) # 3. Создаем таргет-пустышку, чтобы CMake знал, что нужно запустить команду add_custom_target(pack_resources DEPENDS "${RESOURCES_ZIP}") # 4. Делаем основной проект зависимым от архивации add_dependencies(space-game001 pack_resources) # Определяем путь к директории установки (относительно папки билда) set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/public") # 1. Устанавливаем основной HTML файл install(TARGETS space-game001 RUNTIME DESTINATION . ) # 2. Устанавливаем сопутствующие файлы (JS, WASM и сгенерированный архив данных) # Emscripten создает их в той же папке, что и таргет install(FILES "${CMAKE_CURRENT_BINARY_DIR}/space-game001.js" "${CMAKE_CURRENT_BINARY_DIR}/space-game001.wasm" "${CMAKE_CURRENT_BINARY_DIR}/space-game001.data" DESTINATION . ) install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/space-game001plain.html" DESTINATION . ) # Если вам все еще нужен сам resources.zip отдельно в папке public: #install(FILES "${RESOURCES_ZIP}" DESTINATION .) add_custom_command(TARGET space-game001 POST_BUILD COMMAND ${CMAKE_COMMAND} --install . WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" COMMENT "Automatically deploying to public directory..." )