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文件
輸入make執行makefile文件。
輸入 ./main 就可以看到程序調用了動態庫打印出了"add"。
之所以要分文件夾A和B來演示,是因爲鏈接的時候會首先根據庫名先在本文件夾下搜索庫文件,然後再去環境變量設置的路徑搜索,分成兩個文件夾是爲了證明庫被正確的安裝了。
windows的動態庫使用直接在vs中設置就可以了。
網上有一篇很好的cmake入門教程,這裏是:下載鏈接