From fcaba07e09f06bbdadb57aeb205acb6c4f7d4d34 Mon Sep 17 00:00:00 2001 From: JIe Date: Tue, 8 Oct 2024 14:37:53 +0800 Subject: [PATCH] =?UTF-8?q?cmake=E6=B7=BB=E5=8A=A0windows=E7=BC=96?= =?UTF-8?q?=E8=AF=91,=20main=20=E8=BE=93=E5=85=A5=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=90=8D=E8=B0=83=E6=95=B4,=20constexpr=E4=BD=BF=E7=94=A8strin?= =?UTF-8?q?g=5Fview?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 62 ++++++++++++++++++++++++++++++++++++++++++++++ include/UtilTool.h | 9 ++++--- main.cc | 13 +++++----- 3 files changed, 74 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cc4360a..11aba7d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,7 +68,69 @@ IF(UNIX) ) ELSE(WIN32) + set(ENV{http_proxy} "http://127.0.0.1:10809") + set(ENV{https_proxy} "http://127.0.0.1:10809") + include(FetchContent) + FetchContent_Declare(SFML + GIT_REPOSITORY https://github.com/SFML/SFML.git + GIT_TAG 2.6.x + ) + FetchContent_MakeAvailable(SFML) + #vcpkg + set(VCPKG_PACKAGE C:/document/lib/vcpkg/packages) + set(VCPKG_BUILDTREES_DIR C:/document/lib/vcpkg/buildtrees) + + #ffmpeg + include_directories(${VCPKG_PACKAGE}/ffmpeg_x64-windows/include) + file(GLOB_RECURSE FFMPEG_LIBS ${VCPKG_PACKAGE}/ffmpeg_x64-windows/debug/lib/*.lib) + + add_executable(${PROJECT_N} + main.cc + ${srcs} + ) + target_link_libraries(${PROJECT_N} PRIVATE + sfml-system + sfml-window + sfml-graphics + sfml-network + sfml-audio + ${FFMPEG_LIBS} + spdlog + ) + + add_executable(${PROJECT_N_T} + ${srcs} + ${tests} + ) + target_link_libraries(${PROJECT_N_T} PRIVATE + sfml-system + sfml-window + sfml-graphics + sfml-network + sfml-audio + + GTest::gtest_main + ) + + add_custom_target(run + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_N} ./img/ocean.jpg + DEPENDS ${PROJECT_N} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Starting ${PROJECT_N}" + ) + + add_custom_target(run_test + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_N_T} + DEPENDS ${PROJECT_N_T} + WORKING_DIRECTORY ${PROJECT_CURRENT_BINARY_DIR} + COMMENT "Starting ${PROJECT_N_T}" + ) + add_custom_command( + TARGET ${PROJECT_N} + COMMENT "Copy OpenAL DLL" + PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${SFML_SOURCE_DIR}/extlibs/bin/$,x64,x86>/openal32.dll $ + VERBATIM) ENDIF() include(GoogleTest) gtest_discover_tests(${PROJECT_N_T}) diff --git a/include/UtilTool.h b/include/UtilTool.h index 0265c0c..51a0019 100644 --- a/include/UtilTool.h +++ b/include/UtilTool.h @@ -1,8 +1,9 @@ #ifndef UTILTOOL_H #define UTILTOOL_H -#include #include +#include +#include enum class MediaType{ VIDEO, @@ -14,9 +15,9 @@ enum class MediaType{ class UtilTool { private: - constexpr static std::array ImageTypes{"jpg","png"}; - constexpr static std::array VideoTypes{"mp4"}; - constexpr static std::array AudioTypes{"mp3"}; + constexpr static std::array ImageTypes{"jpg","png"}; + constexpr static std::array VideoTypes{"mp4"}; + constexpr static std::array AudioTypes{"mp3"}; static bool CheckFileIsImage(const std::string& filename); static bool CheckFileIsAudio(const std::string& filename); static bool CheckFileIsVideo(const std::string& filename); diff --git a/main.cc b/main.cc index f2d6b23..533bb0c 100644 --- a/main.cc +++ b/main.cc @@ -6,29 +6,30 @@ #include #include "UtilTool.h" #include "mediaService.h" +#include "SFML/Window/VideoMode.hpp" -#define DEBUG - +#define DEBUG +using namespace std::string_view_literals; constexpr int CLIENT_WIDTH = 800; constexpr int CLIENT_HEIGHT = 600; int main(int argc, char** argv){ + auto filename = R"(C:/document/project/mp-sfml/img/ocean.mp4)"sv; spdlog::info("Current WorkDir Is: {}",argv[0]); #ifdef DEBUG - argv[1] = R"(../img/ocean.mp4)"; #else + filename = argv[1]; if(argc != 2){ spdlog::error("Usage: mp filename "); return 0; } #endif - spdlog::info("filename: {}", argv[1]); - MediaService mediaService(argv[1], CLIENT_WIDTH, CLIENT_HEIGHT); + spdlog::info("filename: {}", filename); + MediaService mediaService(filename.data(), CLIENT_WIDTH, CLIENT_HEIGHT); std::shared_ptr window = std::make_shared(sf::VideoMode(CLIENT_WIDTH, CLIENT_HEIGHT), "mp"); mediaService.SetWindow(window); bool running = true; - while(running){ sf::Event event; while(window->pollEvent(event)){