馬斯克的龍飛船中的操作系統是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 模塊所