在windows上編譯apr庫apr-util庫
在windows上編譯apr庫apr-util庫
環境:
win10、VS2015企業版、CMake3.18.2
一、下載apr相關庫
1.1)expat:expat-2.1.0.tar.gz
1.2)apr庫:apr-1.6.3.zip
1.3)apr-util庫:apr-util-1.6.1-win32-src.zip
解壓到指定目錄下,最後的目錄結構如下
二、編譯expat
2.1)編寫構建指令碼build_expat_for_vs_2015_x86_debug.bat
下面是指令碼
@echo off ::VS2015 x86編譯環境 call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x86 ::建立構建目錄 if not exist cmake ( mkdir cmake ) cd cmake ::建立nmake工程 ::MSVC=ON 禁止4996警告 ::BUILD_tools=OFF 禁止生成BUILD_tools ::BUILD_examples=OFF 禁止生成BUILD_examples ::BUILD_tests=OFF 禁止生成BUILD_tests ::DBUILD_shared=OFF 生成靜態庫 ::CMAKE_BUILD_TYPE=Debug 生成除錯資訊 cmake -G "NMake Makefiles" -DMSVC=ON -DBUILD_tools=OFF -DBUILD_examples=OFF -DBUILD_tests=OFF -DBUILD_shared=OFF -DCMAKE_BUILD_TYPE=Debug .. nmake pause
2.2)生成expat庫
將build_expat_for_vs_2015_x86_debug.bat檔案放到expat-2.1.0目錄下,執行指令碼生成靜態庫expat.lib檔案。
三、編譯apr
3.1)編寫構建指令碼build_apr_for_vs_2015_x86_debug.bat
下面是指令碼
@echo off ::VS2015 x86編譯環境 call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x86 ::建立構建目錄 if not exist cmake ( mkdir cmake ) cd cmake ::建立nmake工程 ::APR_INSTALL_PRIVATE_H=OFF 禁止APR_INSTALL_PRIVATE_H ::APR_HAVE_IPV6=OFF 禁止APR_HAVE_IPV6 ::INSTALL_PDB=OFF 禁止INSTALL_PDB ::APR_BUILD_TESTAPR=OFF 禁止APR_BUILD_TESTAPR ::TEST_STATIC_LIBS=OFF 禁止TEST_STATIC_LIBS ::CMAKE_BUILD_TYPE=Debug 生成除錯版本 cmake -G "NMake Makefiles" -DAPR_INSTALL_PRIVATE_H=OFF -DAPR_HAVE_IPV6=OFF -DINSTALL_PDB=OFF -DAPR_BUILD_TESTAPR=OFF -DTEST_STATIC_LIBS=OFF -DCMAKE_BUILD_TYPE=Debug .. nmake ::拷貝標頭檔案 copy /y apr.h ../include/ pause
說明:如果拷貝失敗,手動拷貝。從make資料夾拷到include資料夾。
3.2)生成apr庫
將build_apr_for_vs_2015_x86_debug.bat檔案放到apr-1.6.3目錄下,執行指令碼生成靜態庫apr-1.lib檔案。
四、編譯apr-util
4.1)修改CMakeLists.txt檔案,新增紅色的內容
PROJECT(APR-Util C) CMAKE_MINIMUM_REQUIRED(VERSION 2.8) #FIND_PACKAGE(OpenSSL) #FIND_PACKAGE(expat) ... SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/libaprutil-1.pdb) TARGET_LINK_LIBRARIES(libaprutil-1 ${APR_LIBRARIES} ${XMLLIB_LIBRARIES} ${SYSTEM_LIBRARIES}) SET_TARGET_PROPERTIES(libaprutil-1 PROPERTIES COMPILE_DEFINITIONS "APU_DECLARE_EXPORT;APR_DECLARE_EXPORT;XML_STATIC;WINNT") ... SET(install_targets ${install_targets} aprutil-1) TARGET_LINK_LIBRARIES(aprutil-1 ${APR_LIBRARIES} ${XMLLIB_LIBRARIES} ${SYSTEM_LIBRARIES}) SET_TARGET_PROPERTIES(aprutil-1 PROPERTIES COMPILE_DEFINITIONS "APU_DECLARE_STATIC;APR_DECLARE_STATIC;APU_DSO_MODULE_BUILD;XML_STATIC")
說明:增加兩個${SYSTEM_LIBRARIES}
去掉#FIND_PACKAGE(OpenSSL) #FIND_PACKAGE(expat) 加#
4.2)編寫構建指令碼build_aprutil_for_vs_2015_x86_debug.bat
@echo off ::VS2015 x86編譯環境 call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x86 set CURRENT_DIR=%~dp0
::設定APR標頭檔案目錄 set APR_INCLUDE_DIR=%CURRENT_DIR%apr-1.6.3\include ::設定APR庫檔案 set APR_LIBRARIES=%CURRENT_DIR%apr-1.6.3\cmake\apr-1.lib
::設定EXPAT標頭檔案目錄 set EXPAT_INCLUDE_DIRS=%CURRENT_DIR%../expat-2.1.0/lib ::設定EXPAT庫檔案 set EXPAT_LIBRARIES=%CURRENT_DIR%../expat-2.1.0/cmake/expat.lib ::設定window系統庫檔案 set SYSTEM_LIBRARIES="ws2_32.lib mswsock.lib rpcrt4.lib" ::建立構建目錄 if not exist cmake ( mkdir cmake ) cd cmake ::建立nmake工程 ::MSVC=ON 禁止4996警告 ::APU_HAVE_CRYPTO=OFF 禁止APU_HAVE_CRYPTO ::APU_HAVE_ODBC=OFF 禁止APU_HAVE_ODBC ::APU_HAVE_ODBC=OFF 禁止APU_HAVE_ODBC ::APR_HAS_LDAP=OFF 禁止APR_HAS_LDAP ::INSTALL_PDB=OFF 禁止INSTALL_PDB ::APR_BUILD_TESTAPR=OFF 禁止APR_BUILD_TESTAPR ::TEST_STATIC_LIBS=OFF 禁止TEST_STATIC_LIBS ::APR_INCLUDE_DIR=ON 啟用EXPAT_FOUND ::APR_INCLUDE_DIR=%APR_INCLUDE_DIR% 設定APR標頭檔案目錄 ::APR_LIBRARIES=%APR_LIBRARIES% 設定APR庫檔案 ::EXPAT_INCLUDE_DIRS=%EXPAT_INCLUDE_DIRS% 設定EXPAT標頭檔案目錄 ::EXPAT_LIBRARIES=%EXPAT_LIBRARIES% 設定EXPAT庫檔案 ::SYSTEM_LIBRARIES=%SYSTEM_LIBRARIES% 設定window系統庫檔案 ::CMAKE_BUILD_TYPE=Debug 生成除錯版本 cmake -G "NMake Makefiles" -DAPU_HAVE_CRYPTO=OFF -DAPU_HAVE_ODBC=OFF -DAPR_HAS_LDAP=OFF -DINSTALL_PDB=OFF -DAPR_BUILD_TESTAPR=OFF -DTEST_STATIC_LIBS=OFF -DEXPAT_FOUND=ON -DAPR_INCLUDE_DIR=%APR_INCLUDE_DIR% -DAPR_LIBRARIES=%APR_LIBRARIES% -DEXPAT_INCLUDE_DIRS=%EXPAT_INCLUDE_DIRS% -DEXPAT_LIBRARIES=%EXPAT_LIBRARIES% -DSYSTEM_LIBRARIES=%SYSTEM_LIBRARIES% -DCMAKE_BUILD_TYPE=Debug .. nmake pause
4.3)生成aprutil庫
將build_aprutil_for_vs_2015_x86_debug.bat檔案放到apr-util-1.6.1目錄下,執行指令碼生成靜態庫aprutil-1.lib和動態庫libaprutil-1.lib、libaprutil-1.dll檔案。