<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    cmake學習筆記(五)

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    cmake 學習筆記(三) 中簡單學習了 find_package 的 model 模式,在cmake 學習筆記(四)中了解一個CMakeCache相關的東西。但靠這些知識還是不能看懂PySide使用CMakeLists文件,接下來繼續學習find_package的 config 模式及package configure文件相關知識

    find_package 的 config 模式

    當CMakeLists.txt中使用find_package命令時,首先啟用的是 module 模式:

    • 按照 CMAKE_MODULE_PATH 路徑和cmake的安裝路徑去搜索finder文件 Find<package>.cmake

    如果finder未找到,則開始 config 模式:

    • 將在下列路徑下查找 配置 文件 <name>Config.cmake 或 <lower-case-name>-config.cmake

    <prefix>/

    (W)

    <prefix>/(cmake|CMake)/

    (W)

    <prefix>/<name>*/

    (W)

    <prefix>/<name>*/(cmake|CMake)/

    (W)

    <prefix>/(share|lib)/cmake/<name>*/

    (U)

    <prefix>/(share|lib)/<name>*/

    (U)

    <prefix>/(share|lib)/<name>*/(cmake|CMake)/

    (U)

    • find_package 參數及規則見manual

    <name>Config.cmake

    該文件至少需提供頭文件路徑和庫文件信息。比如 ApiExtractorConfig.cmake 在Windows下一個例子:

    # - try to find APIEXTRACTOR
    #  APIEXTRACTOR_INCLUDE_DIR   - Directories to include to use APIEXTRACTOR
    #  APIEXTRACTOR_LIBRARIES     - Files to link against to use APIEXTRACTOR
    
    SET(APIEXTRACTOR_INCLUDE_DIR "D:/shiboken/dist/include/apiextractor")
    if(MSVC)
        SET(APIEXTRACTOR_LIBRARY "D:/shiboken/dist/lib/apiextractor.lib")
    elseif(WIN32)
        SET(APIEXTRACTOR_LIBRARY "D:/shiboken/dist/bin/apiextractor.dll")
    else()
        SET(APIEXTRACTOR_LIBRARY "D:/shiboken/dist/lib/apiextractor.dll")
    endif()

    該文件是通過 configure_file 機制生成的,我們看看 ApiExtractorConfig.cmake.in 文件:

    SET(APIEXTRACTOR_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/include/apiextractor@apiextractor_SUFFIX@")
    if(MSVC)
        SET(APIEXTRACTOR_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_SHARED_LIBRARY_PREFIX@apiextractor@apiextractor_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@.lib")
    elseif(WIN32)
        SET(APIEXTRACTOR_LIBRARY "@CMAKE_INSTALL_PREFIX@/bin/@CMAKE_SHARED_LIBRARY_PREFIX@apiextractor@apiextractor_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@")
    else()
        SET(APIEXTRACTOR_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_SHARED_LIBRARY_PREFIX@apiextractor@apiextractor_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@")
    endif()

    對應的命令(變量的定義略過)

    configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ApiExtractorConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/ApiExtractorConfig.cmake" @ONLY)

    <name>ConfigVersion.cmake

    該文件用來比對版本是否匹配,看看ApiExtractorConfigVersion.cmake.in 的內容:

    set(PACKAGE_VERSION @apiextractor_VERSION@)
    
    if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )
       set(PACKAGE_VERSION_COMPATIBLE FALSE)
    else("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )
       set(PACKAGE_VERSION_COMPATIBLE TRUE)
       if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
          set(PACKAGE_VERSION_EXACT TRUE)
       endif( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
    endif("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )

    一般提供設置下面的變量

    PACKAGE_VERSION

    完整的版本字符串

    PACKAGE_VERSION_EXACT

    如果完全匹配為真

    PACKAGE_VERSION_COMPATIBLE

    如果兼容為真

    PACKAGE_VERSION_UNSUITABLE

    如果不可用為真

    find_package進而根據這些設置

    <package>_VERSION

    full provided version string

    <package>_VERSION_MAJOR

    major version if provided, else 0

    <package>_VERSION_MINOR

    minor version if provided, else 0

    <package>_VERSION_PATCH

    patch version if provided, else 0

    <package>_VERSION_TWEAK

    tweak version if provided, else 0

    參考

    from:http://blog.csdn.net/dbzhang800/article/details/6341029

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全