Vcpkg新增MSBuild構(gòu)建庫示例

概述

針對一些沒有提供CMake,提供有sln/vcxproj的庫,則需要采用vcpkg_build_msbuild方法,然后混合一些CMake腳本方法來完成構(gòu)建及處理。

ZeroMQ

ZeroMQ是一個分布式消息隊列實現(xiàn),C++的實現(xiàn)是libzmq

在libzmq的源代碼路徑builds\msvc下提供了Visual Studio的各個版本的解決方案,Vcpkg已經(jīng)包含了該庫,可以看一下具體是如何配置。

調(diào)整triplet

if (TRIPLET_SYSTEM_ARCH MATCHES "x86")
    set(MSBUILD_PLATFORM "Win32")
else ()
    set(MSBUILD_PLATFORM ${TRIPLET_SYSTEM_ARCH})
endif()

對于Vcpkg來講,其triplet只有x86和x64,但是正常情況下sln/vcxproj中的配置都是Win32/x64,因而需要根據(jù)用戶安裝的triplet來調(diào)整一下MSBuild構(gòu)建時的Platform。

判定構(gòu)建類型

鑒于用戶安裝時指定的triplet可能是static,也就是說構(gòu)建時需要進行不同的處理,判定方法如下:

if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
# 動態(tài)構(gòu)建指令
else()
# 靜態(tài)構(gòu)建指令
endif()

如果不支持static,則最好在開頭添加判定并調(diào)整到dynamic

if (VCPKG_LIBRARY_LINKAGE STREQUAL static)
    message(STATUS "Warning: Static building not supported yet. Building dynamic.")
    set(VCPKG_LIBRARY_LINKAGE dynamic)
endif()

動態(tài)庫構(gòu)建

vcpkg_build_msbuild(
    PROJECT_PATH ${SOURCE_PATH}/builds/msvc/vs2015/libzmq/libzmq.vcxproj
    RELEASE_CONFIGURATION ReleaseDLL
    DEBUG_CONFIGURATION DebugDLL
)

其中分別指定了release和debug的配置。

靜態(tài)庫構(gòu)建

vcpkg_build_msbuild(
   PROJECT_PATH ${SOURCE_PATH}/builds/msvc/vs2015/libzmq/libzmq.vcxproj
    RELEASE_CONFIGURATION ReleaseLIB
    DEBUG_CONFIGURATION DebugLIB
)

安裝

MSBuild會根據(jù)工程配置將結(jié)果輸出到特定目錄,安裝的時候就需要手動復(fù)制到包對應(yīng)路徑下。

動態(tài)庫安裝

    file(INSTALL
        ${SOURCE_PATH}/bin/${MSBUILD_PLATFORM}/Debug/v140/dynamic/libzmq.dll
        DESTINATION ${CURRENT_PACKAGES_DIR}/debug/bin
    )
    file(INSTALL
        ${SOURCE_PATH}/bin/${MSBUILD_PLATFORM}/Release/v140/dynamic/libzmq.dll
        DESTINATION ${CURRENT_PACKAGES_DIR}/bin
    )
    file(INSTALL
        ${SOURCE_PATH}/bin/${MSBUILD_PLATFORM}/Debug/v140/dynamic/libzmq.lib
        DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib
    )
    file(INSTALL
        ${SOURCE_PATH}/bin/${MSBUILD_PLATFORM}/Release/v140/dynamic/libzmq.lib
        DESTINATION ${CURRENT_PACKAGES_DIR}/lib
    )

靜態(tài)庫安裝

    file(INSTALL
        ${SOURCE_PATH}/bin/${MSBUILD_PLATFORM}/Debug/v140/static/libzmq.lib
        DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib
    )
    file(INSTALL
        ${SOURCE_PATH}/bin/${MSBUILD_PLATFORM}/Release/v140/static/libzmq.lib
        DESTINATION ${CURRENT_PACKAGES_DIR}/lib
    )

頭文件

file(INSTALL
    ${SOURCE_PATH}/include/
    DESTINATION ${CURRENT_PACKAGES_DIR}/include
)

注意

由于工程本身的復(fù)雜性,針對MSBuild構(gòu)建包,需要根據(jù)不同情況進行調(diào)整。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • CMake學(xué)習(xí) 本篇分享一下有關(guān)CMake的一些學(xué)習(xí)心得以及相關(guān)使用。 本文目錄如下: [1、CMake介紹] [...
    AlphaGL閱讀 12,290評論 11 79
  • 注:首發(fā)地址 1. 前言 當在做 Android NDK 開發(fā)時,如果不熟悉用 CMake 來構(gòu)建,讀不懂 CMa...
    cfanr閱讀 24,556評論 1 53
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,948評論 18 139
  • 轉(zhuǎn)載自我的博客:CMake 簡介和 CMake 模板。 如果你用 Linux 操作系統(tǒng),使用 cmake 會簡單很...
    district10閱讀 11,568評論 3 27
  • 我們的一生就像《西游記》 小時候,我們就是孫悟空:調(diào)皮搗蛋、大鬧天宮。 青年時,我們就是豬八戒:敢愛敢恨、好吃懶做...
    TWE閱讀 4,417評論 0 0