日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

cmake 学习笔记(三) (转)

發布時間:2025/3/21 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cmake 学习笔记(三) (转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

接前面的?Cmake學習筆記()??Cmake學習筆記()?繼續學習 cmake 的使用

學習一下cmake finder

finder是神馬東西

當編譯一個需要使用第三方庫的軟件時,我們需要知道

去哪兒找頭文件 .h

對比GCC?-I?

去哪兒找庫文件 (.so/.dll/.lib/.dylib/...)

對比GCC?-L?

需要鏈接的庫文件的名字

對比GCC?-l?

這也是一個 finder 需要返回的最基本的信息

如何使用?

比如說,我們需要一個第三方庫 curl,那么我們的 CMakeLists.txt 需要指定頭文件目錄,和庫文件,類似

include_directiories(/usr/include)

target_link_libraries(myprogram curl)

如果借助于cmake提供的finder會怎么樣呢?使用cmakeModules目錄下的FindCURL.cmake,相應的 CMakeList.txt 文件

find_package(CURL REQUIRED)

include_directories(${CURL_INCLUDE_DIR})

target_link_libraries(curltest ${CURL_LIBRARY})

find_package(CURL)

if(CURL_FOUND)

include_directories(${CURL_INCLUDE_DIR})

target_link_libraries(curltest ${CURL_LIBRARY})

else(CURL_FOUND)

message(FATAL_ERROR "curl not found!")

endif(CURL_FOUND)

如果我們使用的finder,不是cmake自帶的怎么辦

  • 放置位置:工程根目錄下的 cmake/Modules/
  • 然后在 CMakeList.txt 中添

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")

find_package如何工

find_package 將會在module路徑下查找 Find<name>.cmake。首先它搜索 ${CMAKE_MODULE_PATH}中的所有路徑,然后搜索 <CMAKE_ROOT>/share/cmake-x.y/Modules/

如果這個文件未找到,它將會查找 <Name>Config.cmake <lower-case-name>-config.cmake 文件。這兩個文件是庫文件安裝時自己安裝的,將自己的路徑硬編碼到其中。

前者稱為 module 模式,后者稱為 config

每個模塊一般都會提供一下幾個變

  • <name>_FOUND
  • <name>_INCLUDE_DIR <name>_INCLUDES
  • <name>_LIBRARY <name>_LIBRARIES <name>_LIBS
  • <name>_DEFINITIONS

編寫finder

  • 首先使用 find_package 探測本軟件包依賴的第三方庫(參數 QUIETLY REQUIRED應該被傳遞)
  • 如果 pkg-config 可用,則可以用其去探測include/library
  • 分別使用 find_path find_library 查找頭文件和庫文
    • pkg-config 提供的路徑僅作為參
    • CMake 有很多硬編碼的路
    • 結果放到 <name>_INCLUDE_DIR <name>_LIBRARY (注意:單數而不是復數)
  • 設置 <name>_INCLUDE_DIRS <name>_INCLUDE_DIR <dependency1>_INCLUDE_DIRS ...
  • 設置 <name>_LIBRARIES <name>_LIBRARY <dependency1>_LIBRARIES ...
    • 依賴使用復數,包自身使用單數形式(由find_pathfind_library提供)
  • 調用宏 find_package_handle_standard_args() 設置 <name>_FOUND 并打印或失敗信息

?

From: http://blog.csdn.net/dbzhang800/article/details/6329314

轉載于:https://www.cnblogs.com/time-is-life/p/7009643.html

總結

以上是生活随笔為你收集整理的cmake 学习笔记(三) (转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。