日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cmake 学习笔记(三) (转)

發布時間:2025/3/21 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 学习笔记(三) (转)的全部內容,希望文章能夠幫你解決所遇到的問題。

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