[cmake] 使用靜態庫archive文件

上一篇文章中,我們製作了一個archive文件,那接下來就是如何使用它了。首先來看一下程序的目錄結構

t2
├── build
├── CMakeLists.txt
└── src
    ├── CMakeLists.txt
    └── main.c

最外層的CMakeLists.txt中內容爲

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(MA52103231)


CMAKE_POLICY(SET CMP0002 OLD)#CMP0002 OLD的概念見下文
CMAKE_POLICY(SET CMP0015 NEW)#CMP0015 NEW的概念見下文

ADD_SUBDIRECTORY(src construct)
依然如此簡單,清晰
src/CMakeLists.txt中的內容爲

AUX_SOURCE_DIRECTORY(. all_sources)#將當前目錄(.)下的所有源文件(*.c *.cpp)加入到變量all_sources中

ADD_EXECUTABLE(myexpect ${all_sources})#聲明要用所有的源文件生成一個可執行程序myexpect

INCLUDE_DIRECTORIES(../../t1/build/include)#定義了源文件中要使用的某些h文件的所在路徑,這個路徑使用了當前目錄的前綴,
                                           #而當前目錄就是當前CMakeLists.txt所在目錄
LINK_DIRECTORIES(../../t1/build/libstatic)#這個其實也是使用了當前目錄的概念,不過需要使用CMP0015 NEW這個規則,否則,我還真找不到當前目錄是哪個
TARGET_LINK_LIBRARIES(myexpect core)#定義我們的可執行程序要鏈接的庫,此處是core(默認是動態庫,不過目標文件裏面只有靜態庫,所以就鏈接靜態庫了,假設
                                    #動態庫和靜態庫都存在,那就指定具體的名字,比如libcore.a 或者 libcore.so)
ADD_EXECUTABLE(myexpect ${all_sources})#此處再次使用了這句話,是爲了解決cmake的一個問題(沒有這句的LINK_DIRECTORIES這句話會不起作用)。同時,如果不用時
                                       #規則CMP0002 OLD的話,在build目錄執行cmkae ..時會因爲有兩句同樣的ADD_EXECUTABLE而停止工作
 
main.c中的內容

#include <core.h>

int main(int argc, char** argv)
{	
	core_help();
	return 0;
}
很簡單

在build目錄執行cmake .. 後再執行make,build目錄會生成如下文件

CMakeCache.txt  CMakeFiles  cmake_install.cmake  construct  Makefile
我們的可執行程序就在construct目錄中了

CMakeFiles  cmake_install.cmake  Makefile  myexpect
執行它得到

root@hu-virtual-machine:/home/hu/project/test_cmake/t2/build/construct# ./myexpect 
my help




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章