轉自:https://blog.csdn.net/bigdog_1027/article/details/79113342html
cmake是Linux(這裏默認是Ubuntu系統)下常使用的編譯C++的工具,而使用cmake就須要先在CmakeLists.txt文件中對編譯規則進行。這裏介紹經常使用的三種指令add_library、target_link_libraries和link_directories,該筆記主要參考了cmake官網給的教程,若有須要請訪問如下網址:函數
https://cmake.org/cmake/help/v3.1/工具
該指令的主要做用就是將指定的源文件生成連接文件,而後添加到工程中去。該指令經常使用的語法以下:spa
add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] [source1] [source2] [...])
其中<name>表示庫文件的名字,該庫文件會根據命令裏列出的源文件來建立。而STATIC、SHARED和MODULE的做用是指定生成的庫文件的類型。STATIC庫是目標文件的歸檔文件,在連接其它目標的時候使用。SHARED庫會被動態連接(動態連接庫),在運行時會被加載。MODULE庫是一種不會被連接到其它目標中的插件,可是可能會在運行時使用dlopen-系列的函數。默認狀態下,庫文件將會在於源文件目錄樹的構建目錄樹的位置被建立,該命令也會在這裏被調用。.net
而語法中的source1 source2分別表示各個源文件。插件
例子:debug
該指令的做用主要是指定要連接的庫文件的路徑,該指令有時候不必定須要。由於find_package和find_library指令能夠獲得庫文件的絕對路徑。不過你本身寫的動態庫文件放在本身新建的目錄下時,能夠用該指令指定該目錄的路徑以便工程可以找到。code
例子以下:htm
link_directories( lib ) |
該指令的做用爲將目標文件與庫文件進行連接。該指令的語法以下:blog
target_link_libraries(<target> [item1] [item2] [...] [[debug|optimized|general] <item>] ...)
上述指令中的<target>是指經過add_executable()和add_library()指令生成已經建立的目標文件。而[item]表示庫文件沒有後綴的名字。默認狀況下,庫依賴項是傳遞的。當這個目標連接到另外一個目標時,連接到這個目標的庫也會出如今另外一個目標的鏈接線上。這個傳遞的接口存儲在interface_link_libraries的目標屬性中,能夠經過設置該屬性直接重寫傳遞接口。
例子以下:
參考博客
https://www.cnblogs.com/coderfenghc/archive/2012/06/23/2559603.html