diff --git a/.gitignore b/.gitignore index c002934..e56c878 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,6 @@ ncmdump build -cmake-build-* \ No newline at end of file +cmake-build-* + +vcpkg_installed \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b08794..9498bd1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,7 @@ project(ncmdump LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) +find_package(ZLIB) find_package(TagLib REQUIRED) if(MSVC) @@ -33,6 +34,24 @@ if(WIN32) ${WIN_SOURCES} ) + if(MSVC) + # 强制所有配置(Debug/Release 等)使用静态 C 运行时库 + foreach(flag_var + CMAKE_CXX_FLAGS + CMAKE_C_FLAGS + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_RELEASE + ) + if(${flag_var}) + string(REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") + endif() + endforeach() + endif() + + target_include_directories(ncmdump_lib PRIVATE src/include) + + target_compile_definitions(ncmdump_exec PRIVATE TAGLIB_STATIC) + set_target_properties(ncmdump_lib PROPERTIES OUTPUT_NAME "libncmdump") target_link_libraries(ncmdump_lib TagLib::tag) @@ -49,6 +68,7 @@ endif() set_target_properties(ncmdump_exec PROPERTIES OUTPUT_NAME "ncmdump") target_include_directories(ncmdump_exec PRIVATE src/include) +# link to taglib target_link_libraries(ncmdump_exec TagLib::tag) include(GNUInstallDirs) diff --git a/README.md b/README.md index daca5fb..c0f6689 100644 --- a/README.md +++ b/README.md @@ -79,20 +79,18 @@ git clone https://github.com/taurusxin/ncmdump.git 使用 CMake 配置项目。Windows 下若使用 GNU 套件,推荐使用 [msys2](https://www.msys2.org/) 或者 [winlibs](https://winlibs.com/) -注意:从 1.6 版本开始,CMake 构建不再依赖于 gitsubmodule,因此无需再克隆 `taglib` 仓库,改为使用系统的 taglib 库,针对不同系统上的构建,请参照如下方法 +注意:从 1.6 版本开始,CMake 构建不再依赖于 gitmodule,因此无需再克隆 `taglib` 仓库,改为使用系统的 taglib 库,针对不同系统上的构建,请参照如下方法 ### Windows -Windows 下,你可以使用 vcpkg 来安装 taglib 库,或者手动下载 taglib 的源码,并使用 CMake 来构建 taglib 库 - -vcpkg +Windows 下,首先使用 vcpkg 来安装 taglib 库,或者手动下载 taglib 的源码,参照[官方文档](https://github.com/taglib/taglib/blob/master/INSTALL.md#building-taglib-msvc)使用 CMake 来构建 taglib 库,当然还需要额外安装依赖。当然首选还是推荐使用 vcpkg 来管理依赖。 ```shell -# 安装 taglib 库 -vcpkg install taglib:x64-windows +# 安装 taglib 的静态库 +vcpkg install taglib:x64-windows-static -# 配置项目 -cmake -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%\scripts\vcpkg.cmake -B build +# 配置项目,替换 %VCPKG_ROOT% 为你的 vcpkg 安装路径 +cmake -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake -B build # 编译项目 cmake --build build -j 8 --config Release diff --git a/src/ncmcrypt.cpp b/src/ncmcrypt.cpp index e9a8c93..5980639 100644 --- a/src/ncmcrypt.cpp +++ b/src/ncmcrypt.cpp @@ -25,15 +25,16 @@ const unsigned char NeteaseCrypt::mPng[8] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, static void aesEcbDecrypt(const unsigned char *key, std::string &src, std::string &dst) { + int i, n; unsigned char out[16]; - const int n = src.length() >> 4; + n = src.length() >> 4; dst.clear(); AES aes(key); - for (int i = 0; i < n - 1; i++) + for (i = 0; i < n - 1; i++) { aes.decrypt((unsigned char *)src.c_str() + (i << 4), out); dst += std::string((char *)out, 16); diff --git a/vcpkg.json b/vcpkg.json new file mode 100644 index 0000000..55ead3f --- /dev/null +++ b/vcpkg.json @@ -0,0 +1,7 @@ +{ + "name": "ncmdump", + "version": "1.6.0", + "dependencies": [ + "taglib" + ] +}