cmake學習筆記 五

2021-09-06 18:12:13 字數 2813 閱讀 4744

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

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

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

/(w)

/(cmake|cmake)/

(w)/*/

(w)/*/(cmake|cmake)/

(w)/(share|lib)/cmake/*/

(u)/(share|lib)/*/

(u)/(share|lib)/*/(cmake|cmake)/

(u)

# - 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@@[email protected]")

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("$/apiextractorconfig.cmake.in" "$/apiextractorconfig.cmake" @only)
該檔案用來比對版本是否匹配,看看apiextractorconfigversion.cmake.in 的內容:

set(package_version @apiextractor_version@)

if("$" version_less "$" )

set(package_version_compatible false)

else("$" version_less "$" )

set(package_version_compatible true)

if( "$" strequal "$")

set(package_version_exact true)

endif( "$" strequal "$")

endif("$" version_less "$" )

一般提供設定下面的變數

package_version

完整的版本字串

package_version_exact

如果完全匹配為真

package_version_compatible

如果相容為真

package_version_unsuitable

如果不可用為真

find_package進而根據這些設定

_version

full provided version string

_version_major

major version if provided, else 0

_version_minor

minor version if provided, else 0

_version_patch

patch version if provided, else 0

_version_tweak

tweak version if provided, else 0

from:

cmake學習筆記 五

在cmake 學習筆記 三 中簡單學習了 find package 的 model 模式,在cmake 學習筆記 四 中了解乙個cmakecache相關的東西。但靠這些知識還是不能看懂pyside使用cmakelists檔案,接下來繼續學習find package的 config 模式及packag...

CMake學習筆記

cmake是乙個跨平台的安裝編譯工具,能夠生成各種各樣的makefile或者project檔案。cmake並不直接構建出最終的軟體,而是產生標準的構建檔案 即工程檔案,如unix下的makefile或windows下的c project檔案 然後構建者就可以使用平台的ide環境進行常規構建了。在wi...

CMAKE學習筆記

方法1 cmake中有兩個變數用於指定輸出檔案的位置,通過設定這兩個變數executable output path和library output path的值指定exe檔案和lib檔案放置的目錄,如 set executable output path set library output pat...