cmake學習筆記之add_library、target_link_libraries和link_directories


cmake是Linux(這里默認是Ubuntu系統)下常使用的編譯C++的工具,而使用cmake就需要先在CmakeLists.txt文件中對編譯規則進行。這里介紹常用的三種指令add_library、target_link_libraries和link_directories,該筆記主要參考了cmake官網給的教程,如有需要請訪問以下網址:

https://cmake.org/cmake/help/v3.1/

1. add_library
該指令的主要作用就是將指定的源文件生成鏈接文件,然后添加到工程中去。該指令常用的語法如下:


add_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
[source1] [source2] [...])
其中<name>表示庫文件的名字,該庫文件會根據命令里列出的源文件來創建。而STATIC、SHARED和MODULE的作用是指定生成的庫文件的類型。STATIC庫是目標文件的歸檔文件,在鏈接其它目標的時候使用。SHARED庫會被動態鏈接(動態鏈接庫),在運行時會被加載。MODULE庫是一種不會被鏈接到其它目標中的插件,但是可能會在運行時使用dlopen-系列的函數。默認狀態下,庫文件將會在於源文件目錄樹的構建目錄樹的位置被創建,該命令也會在這里被調用。
而語法中的source1 source2分別表示各個源文件。

例子:

 

 

2. link_directories
該指令的作用主要是指定要鏈接的庫文件的路徑,該指令有時候不一定需要。因為find_package和find_library指令可以得到庫文件的絕對路徑。不過你自己寫的動態庫文件放在自己新建的目錄下時,可以用該指令指定該目錄的路徑以便工程能夠找到。

例子如下:


link_directories(
    lib
)
3. target_link_libraries
該指令的作用為將目標文件與庫文件進行鏈接。該指令的語法如下:


target_link_libraries(<target> [item1] [item2] [...]
[[debug|optimized|general] <item>] ...)
上述指令中的<target>是指通過add_executable()和add_library()指令生成已經創建的目標文件。而[item]表示庫文件沒有后綴的名字。默認情況下,庫依賴項是傳遞的。當這個目標鏈接到另一個目標時,鏈接到這個目標的庫也會出現在另一個目標的連接線上。這個傳遞的接口存儲在interface_link_libraries的目標屬性中,可以通過設置該屬性直接重寫傳遞接口。


例子如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM