[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




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