<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      CMake構建學習筆記11-minizip庫的構建

      準確來說,minizip其實是zlib提供的輔助工具,位于zlib庫的contrib文件夾內。minizip提供了更為高級一點的接口,能直接操作文件進行壓縮。不過,有點麻煩的是這個工具并沒有提供CMake構建的方式。那么可以按照構建giflib的方式,自己組織CMakeList.txt,正好這個項目的代碼量并不多。

      另一個問題是,minizip其實是個可執行程序,Windows下不能直接將其構建成動態鏈接庫,因為Windows下的動態鏈接庫是需要設置導出的,否則就會提示找不到符號的問題。這種情況下最簡便的方式就是將其組織成靜態庫了(項目地址),CMakeList.txt如下所示:

      # 輸出cmake版本提示
      message(STATUS "The CMAKE_VERSION is ${CMAKE_VERSION}.")
      
      # cmake的最低版本要求
      cmake_minimum_required (VERSION 3.10)
      
      # 工程名稱、版本、語言
      project(minizip VERSION 5.2.2)
      
      # 支持當前目錄
      set(CMAKE_INCLUDE_CURRENT_DIR ON)
      
      # 判斷編譯器類型
      message("CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}")
      
      # 判斷編譯器類型
      if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
          message(">> using Clang")
      elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
          message(">> using GCC")
      elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
          message(">> using Intel C++")
      elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
          message(">> using Visual Studio C++")	  
          add_compile_options(/utf-8 /wd4996)  
      else()
          message(">> unknow compiler.")
      endif()
      
      # 查找 ZLIB 模塊
      find_package(ZLIB REQUIRED)
      
      # 源代碼文件
      set(PROJECT_SOURCES ioapi.c iowin32.c miniunz.c minizip.c mztools.c unzip.c zip.c)
      set(PROJECT_HEADER crypt.h ioapi.h iowin32.h mztools.h unzip.h zip.h)
      
      # 將源代碼添加到此項目的可執行文件。
      add_library(${PROJECT_NAME} STATIC ${PROJECT_SOURCES} ${PROJECT_HEADER})
      
      #
      target_link_libraries(${PROJECT_NAME} ZLIB::ZLIB)
      
      # TODO: 如有需要,請添加測試
      
      # 安裝頭文件到 include 目錄
      install(FILES ${PROJECT_HEADER} DESTINATION include/${PROJECT_NAME})
      
      # 安裝庫文件到 lib 目錄
      install(TARGETS ${PROJECT_NAME}
              LIBRARY DESTINATION lib  # 對于共享庫
              ARCHIVE DESTINATION lib  # 對于靜態庫
              RUNTIME DESTINATION bin  # 對于可執行文件
      )
      

      關鍵的構建指令如下所示:

      # 配置CMake  
      cmake .. -G "$Generator" -A x64 `
      -DCMAKE_CONFIGURATION_TYPES=RelWithDebInfo `
      -DCMAKE_PREFIX_PATH="$InstallDir" `
      -DCMAKE_INSTALL_PREFIX="$InstallDir"
      
      # 構建階段,指定構建類型
      cmake --build . --config RelWithDebInfo
      
      # 安裝階段,指定構建類型和安裝目標
      cmake --build . --config RelWithDebInfo --target install
      

      在最后談談動態庫和靜態庫的問題。動態庫和靜態庫各有優缺點,這里就不細致的論述了。但是在Windows下筆者還是傾向于優先使用動態庫。一直以來,二進制兼容的問題一直是困擾C/C++編程的重要問題。比如說,你用VS2010編譯的動態庫在VS2013的環境下可能是無法使用的,這還是同一家產品的不同版本就會造成這個二進制成果的差異性問題。但是,根據Microsoft提供的文檔(參看:https://learn.microsoft.com/zh-cn/cpp/porting/binary-compat-2015-2017 ),VS2015以后的版本就會開始提供二進制兼容的特性了,原理是標準庫、運行時庫(如 msvcp140.dll)、C++ 標準庫保證了ABI(二進制接口)的穩定。筆者也確實發現很多產品的MSVC的預編譯成果能夠在MSVC環境中混用了。比如VS2017編譯的Qt就能夠在VS2019的環境下正常使用。不過這些能混用的成果一般都是動態庫,也就是動態庫的二進制兼容特性更好一點。至于靜態庫,文檔中宣稱靜態庫也可以做到,但是筆者實測至少這個基于VS2017的minizip靜態庫在VS2019中用不了。這一點就留待以后解決了。

      posted @ 2024-08-29 21:43  charlee44  閱讀(476)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 在线一区二区中文字幕| 巨胸美乳无码人妻视频漫画| 亚洲最大国产成人综合网站| 亚洲欧美高清在线精品一区二区| 亚洲国产成人va在线观看天堂| 久久人妻精品大屁股一区| 国产极品尤物粉嫩在线观看| 亚洲激情一区二区三区在线| 性一交一乱一伦一| 熟女精品视频一区二区三区| 亚洲暴爽av天天爽日日碰| 日本免费精品| 亚洲一区二区三区18禁| 又黄又爽又色的少妇毛片| 国产在线观看91精品亚瑟| 久久精品这里热有精品| 临泉县| 国产精品自拍视频我看看| 无套内射视频囯产| 日韩不卡无码精品一区高清视频| 亚洲av永久无码精品漫画| 狠狠v日韩v欧美v| 免费人成视频在线观看网站| 香蕉影院在线观看| 日本肉体xxxx裸交| 日韩精品一区二区av在线| 中文字幕在线永久免费视频| 久久亚洲精品情侣| 欧洲无码一区二区三区在线观看| 在线看无码的免费网站| 国产无套精品一区二区三区 | 国产av丝袜熟女一二三| 亚洲国产精品久久久久4婷婷 | 乱人伦人妻精品一区二区| 在线高清免费不卡全码| 民县| 亚洲av产在线精品亚洲第一站| 成人无码视频97免费| 亚洲熟妇精品一区二区| 亚洲日本欧美日韩中文字幕| 国产美女精品自在线拍免费|