2009年2月11日 星期三

CMake - 使用外部library與header filer

INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)
這一個指令可以用來增加程式的搜索路徑,路徑之間用空白分割,若路徑包含空白,可用雙引號將它括起來。
把/usr/include/hello/加入收尋header file的路徑中
INCLUDE_DIRECTORIES(/usr/include/hello)

LINK_DIRECTORIES(directory1 directory2 ...)
添加非標準的library path

TARGET_LINK_LIBRARIES(target library1
<debug | optimized> library2
...)

這裡可以加入一個shared library
TARGET_LINK_LIBRARIES(main libhello.so)
也可以加入static library
TARGET_LINK_LIBRARIES(main libhello.a)

FIND_PATH用來指定路徑中搜索文件名
例:
FIND_PATH(myHeader NAMES hello.h PATHS /usr/include /usr/include/hello)

特殊的環境變數CMAKE_INCLUDE_PATH和CMAKE_LIBRARY_PATH
注意,這兩個是環境變數而不是cmake變數。
使用方法是要在bash中用export或者在csh中使用set命令設置或者CMAKE_INCLUDE_PATH=/home/include cmake

[2009.3.25 補充]
要在生成可執行檔時,要link一些library可以使用以下方法
例:
$ gcc main.c -lsctp
則在生成執行檔前,要加下面這一行
LINK_LIBRARIES(sctp)
只有對每一個target均需要使用到此library,才會使用到LINK_LIBRARIES
而且,LINK_LIBRARIES必需擺在ADD_EXECUTABLE指令之前。

若用TARGET_LINK_LIBRARIES取代的話,則TARGET_LINK_LIBRARIES必需擺在ADD_EXECUTABLE之後。
CMakeLists.txt
# Project Name
PROJECT(one-to-one)
# set source
SET(SRC_LIST clnt.c serv.c)

# add library,只有當對每一個target均需要此library,才使用LINK_LIBRARY,否則請使用TARGET_LINK_LIBRARY指令
# LINK_LIBRARIES(sctp)

# define the executable
ADD_EXECUTABLE(serv serv.c)
# add library for each target
TARGET_LINK_LIBRARIES(serv sctp)

#define the executable
ADD_EXECUTABLE(clnt clnt.c)
#add library for each target
TARGET_LINK_LIBRARIES(clnt sctp

沒有留言: