我們在用cmake構建乙個工程(專案)的時候,需要明白如下幾件事情:
a.專案源**在**?
b.專案標頭檔案在**?
c.怎麼生成靜態或者動態庫及庫的位置?
d.程式鏈結的靜態庫在**?
e.專案中用到的已編譯好的靜態庫庫和實時編譯的庫與專案的依賴關係?
如果上面這幾件事你知道怎麼做了,多大的工程就都不是問題了。其實主要是明白庫的編譯、鏈結的工作機制,如果不熟悉,推薦看《深入理解計算機系統》和《程式設計師的自我修養》這兩本書,講解得很好。對於cmake這種工具的學習,個人覺得在用中學、有需求時再學是最有效的,下面就幾種我時常碰到的專案結構的構建進行說明。
這個opengl專案依賴glfw、glew、glm以及opengl核心庫等庫檔案,檔案目錄如下:
其中,如上圖所示的cmakelists.txt檔案內容為:
#為專案配置cmake的總入口,設定一些全域性的變數
cmake_minimum_required(version 2.6 fatal_error)
project (summary_debug)
#summary_debug_source_dir這個變數是在指定專案名稱為summary_debug後自動生成的變數,
#指的是我們在cmake gui中為專案指定的源目錄
#設定glfw庫的頭檔案目錄
set(glfw3_include_dir $/opengl_helper/include/glfw)
#設定glfw庫的庫檔案路徑
set(glfw3_library $/opengl_helper/x64/libs/glfw3.lib)
#設定glew庫的頭檔案目錄
set(glew_include_dir $/opengl_helper/include/glew)
#設定glew庫的庫檔案目錄
set(glew_library $/opengl_helper/x64/libs/glew32.lib)
#設定glm庫的頭檔案目錄,改庫不需要預先進行編譯,可以直接使用
set(glm_include_dirs $/opengl_helper/include/glm)
#將上述的頭檔案目錄新增到乙個列表變數之中
#將上述的庫檔案目錄新增到乙個列表變數之中
#利用find_package命令找到opengl
find_package( opengl required )
#設定專案的標頭檔案包含目錄
include_directories( $ )
#設定子目錄
其中,如上圖所示的main_project中的cmakelists.txt檔案內容為:
cmake_minimum_required(version 2.6 fatal_error)
project (main_project)
#在當前目錄下搜尋標頭檔案及原始檔
file(glob_recurse current_headers *.h *.hpp)
file(glob current_sources *.cpp)
#為標頭檔案和原始檔進行分組
source_group("include" files $)
source_group("source" files $)
add_executable(main_project $
$ )#設定專案的外部依賴庫
target_link_libraries( main_project $)
將cmakelists.txt檔案等準備好了之後,開啟cmake gui,設定如下:
接著選擇編譯器然後分別進行configure和generate即可生成專案,然後用vs2013(我用的vs2013)開啟專案即可執行。
CMake構建CUDA專案
在大量的c c 的專案中都使用cmake來進行專案的管理,而cuda又是很流行的平行計算庫,利用cmake來構建cuda專案就顯得很有必要了,而且專案中使用的cmakelists.txt基本框架一致的,下面簡單地記載一下這種cmakelists.txt檔案的內容 cmakelists.txt for...
CMake構建OpenCV,GDAL專案
本文舉例的開源庫是opencv和gdal,其他塊源庫類似 使用本篇方法的前提是make install,即開源庫是install的。當然,沒有install的也是可以用的,只需要在findpage前找到dir即可。如找opencv set opencv dir home jie third part...
用CMake 構建Qt 專案
譯 用cmake構建qt專案 qtsdk中已經包含了qmake用於處理跨平台的編譯問題。然而,還存在其它編譯工具,比如autotools,scons和cmake.這些工具滿足不同的需求,比如外部依賴。當kde專案從使用qt3公升級到使用qt4時,整個專案將構建工具從autotools轉而使用cmak...