在linux中使用cmake構建共享庫(動態鏈接庫)

cmake是一種跨平臺的構建工具。它可以生成各種平臺支持的makefile和project文件。

在windows下,一般都是用visual studio來管理工程。

事實上,就本人來說,使用cmake主要是爲了避免在linux下手寫makefile的繁瑣。

cmake在ubuntu下的安裝:

sudo apt-get install cmake

下面來看如何使用cmake構建動態庫。

假設我們的目錄A下有兩個代碼文件:

add.h

#ifndef ADD_H
#define ADD_H
#include <stdio.h>
void add();
#endif

add.c

#include "add.h"
void add()
{
        printf("add\n");
}

下面將這兩個文件編譯爲動態鏈接庫。在文件夾A下創建CMakeLists.txt文件,內容如下:

SET(CMAKE_INSTALL_PREFIX / usr)                                 
project (lib)                                                                     
set(SRC add.c add.h)                                                      
add_library(add SHARED $ {SRC})                                 
INSTALL(FILES add.h DESTINATION include)                   
INSTALL(TARGETS add LIBRARY DESTINATION lib)        

以上6條cmake指令作用分別爲:

(1)設置庫的安裝路徑爲/usr                              
(2)設置此工程名稱
(3)設置此工程的源碼
(4)設置輸出的庫的類型(SHARED)和名字(add)
(5)設置頭文件的安裝路徑爲usr下的include              
(6)設置庫文件的安裝路徑爲usr下的lib                    


然後依次輸入

cmake .

sudo make install

(1)cmake後跟一個 . 是表示根據當前路徑下的CMakeLists.txt進行構建。

(2)在make install前加sudo 是因爲安裝庫文件和頭文件實際上是拷貝到指定的目錄,拷貝可能需要權限。在本例中sudo make install 等同於sudo cp add.h /usr/include 加上 sudo cp libadd.so /usr/include 。

此時動態庫和頭文件就被安裝到usr目錄下的/lib和/include中了。

如果只爲了構建一個動態庫的話,是不需要安裝到系統中的(即不需要(1),(5),(6)),不過如果不安裝,那麼每次在其他程序中使用此庫的時候都需要手動指定路徑,十分麻煩。


下面來看對動態庫的使用。

在另一個文件夾下B創建一個源文件testadd.c

int main()
{
        add();
}

在文件夾B創建CMakeLists.txt

set(TEST_SRC  testadd.c)                                       #設置使用的文件
ADD_EXECUTABLE(main ${TEST_SRC})                  #設置輸出的可執行文件名稱爲main
TARGET_LINK_LIBRARIES(main add)                     #設置add庫鏈接到main文件


然後輸入cmake . 生成makefile文件。

輸入make執行makefile文件。

輸入 ./main 就可以看到程序調用了動態庫打印出了"add"。

之所以要分文件夾A和B來演示,是因爲鏈接的時候會首先根據庫名先在本文件夾下搜索庫文件,然後再去環境變量設置的路徑搜索,分成兩個文件夾是爲了證明庫被正確的安裝了。

windows的動態庫使用直接在vs中設置就可以了。

網上有一篇很好的cmake入門教程,這裏是:下載鏈接

發佈了66 篇原創文章 · 獲贊 8 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章