find_package()的底層運行機制

馬斯克的龍飛船中的操作系統是Linux,軟件工程使用的是C++,用GCC和GDB去調試代碼,C++如此強大和靈活,所以有必要了解一下C++工程是如何make的.

我們在寫CMakeLists.txt時候需要查找第三方庫的頭文件和庫文件,通常直接是執行

find_package(xxx)

然後就會有對應的

${XXX_INCLUDE_DIRS}和${XXX_LIBRARIES}

如果find_package(xxx)失敗的話,就不會生成這兩個環境變量.
這裏講一下這兩個環境變量是怎麼產生的.

1 find_package的兩種搜索庫模式

Module模式:搜索CMAKE_MODULE_PATH指定路徑下的FindXXX.cmake文件,執行該文件從而找到XXX庫。其中,具體查找庫並給XXX_INCLUDE_DIRS和XXX_LIBRARIES兩個變量賦值的操作由FindXXX.cmake模塊完成。

Config模式:搜索XXX_DIR指定路徑下的XXXConfig.cmake文件,執行該文件從而找到XXX庫。其中具體查找庫並給XXX_INCLUDE_DIRS和XXX_LIBRARIES兩個變量賦值的操作由XXXConfig.cmake模塊完成。

2 CMakeLists.txt中常用的變量

CMAKE_BINARY_DIR

  PROJECT_BINARY_DIR 
  <projectname>_BINARY_DIR
  CMAKE_BINARY_DIR

這三個變量指代的內容是一致的,如果是 in source 編譯,指的就是工程頂層目錄,如果是 out-of-source 編譯,指的是工程編譯發生的目錄。

CMAKE_MODULE_PATH
這個變量用來定義自己的 cmake 模塊所

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章